2011-03-08 24 views
5

मैं सिर्फ अपने रैकस्पेस उबंटू मेवरिक उदाहरण पर निम्न त्रुटि प्राप्त का उपयोग कर बहुत अधिक फ़ाइलें खुली ... लेकिन नहीं अपने स्थानीय उबंटू स्पष्ट वी एम पर:child_process

pipe(): Too many open files 
pipe(): Too many open files 

child_process.js:223 
    var fds = this._internal.spawn(path, 
         ^
Error: Error spawning 
    at ChildProcess.spawn (child_process.js:223:28) 
    at child_process.js:10:15 
    etc..etc.. 

कोड उत्पन्न यह:

function getHeader(url, callback) 
{ 
    var client = spawn('curl', ['-I', url]); 
    client.stdout.on('data', function(data) 
    { 
    client.kill('SIGTERM'); 
    callback(data.toString('utf8')); 
    }); 
} 
+1

डुन्नो आप इसे ठीक करने के लिए क्या कर सकते हैं, लेकिन खुली फ़ाइलों की संख्या ओएस का कॉन्फ़िगर करने योग्य हिस्सा है, यही कारण है कि यह स्थानीय रूप से ठीक काम करता है और आपके सर्वर पर टूट जाता है। –

उत्तर

3

यह जानना उपयोगी होगा कि आपके होस्टिंग प्रदाता ने फ़ाइल सीमा कितनी कम निर्धारित की है: ulimit -n आपको बताएगा कि setrlimits(2) सीमा प्रति प्रक्रिया खुली फ़ाइल डिस्क्रिप्टर की संख्या पर है। विशिष्ट इंस्टॉल 1024 का उपयोग करते हैं। वे कर्नेल मेमोरी उपयोग में सीमित करने के लिए इसे बहुत कम सेट कर सकते हैं।

कठोर सीमाएं हैं, जिन्हें आप केवल रैकस्पेस को विनम्रता से पूछकर उठा सकते हैं (जब तक कि आपके पास /etc/security/limits.conf तक पहुंच पहुंच न हो), और मुलायम सीमाएं, जिन्हें हार्ड सीमा तक बढ़ाया जा सकता है। संसाधन संसाधन को कम रखने की कोशिश करने के लिए, उन्होंने नरम सीमा को कम सेट किया हो सकता है, लेकिन हार्ड सीमा को उच्च रखें।

यह जानना भी उपयोगी होगा कि कितने फ़ाइल डिस्क्रिप्टर node वर्तमान में उपयोग कर रहे हैं। जब आप लॉग इन हों, तो यह देखने के लिए कि कितनी फ़ाइलें खुली हैं, /proc/$(pidof node.js)/fd/ देखें। शायद आप फ़ाइलों या सॉकेट या पाइप को बंद कर रहे हैं जैसे ही उन्हें बंद किया जा सकता है?

+0

'ulimit -n' दोनों रैकस्पेस बॉक्स और मेरे वीएम पर 1024 है ... – mkrecny

+0

'/etc/security/limit.conf' की सामग्री भी दोनों उदाहरणों पर समान हैं .. – mkrecny