2014-10-04 28 views
46

मेरे Node.js स्क्रिप्ट जब spawn का उपयोग कर errnoException (स्मृति समाप्त) एक फेंक दिया ENOMEM की वजह से दुर्घटनाओं।Node.js पकड़ ENOMEM अंडे के बाद फेंक दिया त्रुटि

त्रुटि:

child_process.js:935 
    throw errnoException(process._errno, 'spawn'); 
     ^

Error: spawn ENOMEM 
    at errnoException (child_process.js:988:11) 
    at ChildProcess.spawn (child_process.js:935:11) 
    at Object.exports.spawn (child_process.js:723:9) 
    at module.exports ([...]/node_modules/zbarimg/index.js:19:23) 

मैं पहले से ही error और exit घटना के लिए श्रोताओं उपयोग कर रहा हूँ, लेकिन उनमें से गैर इस त्रुटि के मामले में निकाल दिया हो रही।

मेरे कोड:

zbarimg = process.spawn('zbarimg', [photo, '-q']); 
zbarimg.on('error', function(err) { ... }); 
zbarimg.on('close', function(code) { ... }); 

पूर्ण स्रोत कोड available

क्या स्क्रिप्ट को क्रैश होने से रोकने के लिए मैं कुछ भी कर सकता हूं? मैं फेंक दिया ENOMEM त्रुटि कैसे पकड़ सकता हूँ?

धन्यवाद!

+0

आपको एक उदाहरण छवि कि इस मुद्दे को दोहराने के लिए इस्तेमाल किया जा सकता है? – mscdex

+0

ऐसा तब होता है जब सर्वर स्मृति से बाहर होता है और किसी विशेष छवि के साथ पुन: उत्पन्न नहीं किया जा सकता है। इससे परीक्षण करना मुश्किल हो जाता है: -/ – tobi

+0

आप 'त्रुटि' हैंडलर के अंदर क्या कर रहे हैं? – mscdex

उत्तर

1

आप स्मृति नोड की राशि को बदलने की कोशिश कर सकते इस आदेश के साथ उपयोग करता है: node ----max-old-space-size=1024 yourscript.js

--max की उम्र में अंतरिक्ष आकार = 1024 आवंटित करेगा स्मृति के 1 गिग।

डिफ़ॉल्ट नोड तक राम की 512 एमबी का उपयोग करेगा, लेकिन आपके प्लेटफ़ॉर्म पर निर्भर आप में जब आपको उसकी आवश्यकता और अधिक या कम इतना कचरा संग्रहण किक आवंटित करने के लिए आवश्यकता हो सकती है।

अपने मंच राम के कम से कम 500 MB उपलब्ध तो स्मृति उपयोग --max की उम्र में अंतरिक्ष आकार के लिए = 256 कम सेट करने का प्रयास किया है।

0

मैं एक ही समस्या थी और ट्राई/कैच के साथ ठीक करने के बाद:

try { 
    zbarimg = process.spawn('zbarimg', [photo, '-q']); 
} catch (err) { 
    console.log(err); 
} 
zbarimg.on('error', function(err) { ... }); 
zbarimg.on('close', function(code) { ... }); 
0

आप आउटपुट फ्लश करने के लिए है बुलाया प्रक्रिया से!

एक अजगर उदाहरण इस प्रकार है:

import sys 
... 
sys.stdout.flush() 
संबंधित मुद्दे