मैं कई कंटेनरों के साथ आर्क लिनक्स (कर्नेल 4.3.3-2) पर एक डॉक सर्वर चला रहा हूं। मेरे अंतिम रिबूट के बाद से, कंटेनर के भीतर डॉकटर सर्वर और रैंडम प्रोग्राम दोनों एक संदेश के साथ दुर्घटनाग्रस्त हो जाते हैं, कांटा बनाने में सक्षम नहीं होने के बारे में या (कम अक्सर) कांटा करने के लिए। कार्यक्रम के आधार पर विशिष्ट त्रुटि संदेश अलग है, लेकिन उनमें से अधिकांश विशिष्ट त्रुटि का उल्लेख करते हैं Resource temporarily unavailable
। कुछ उदाहरण त्रुटि संदेशों के लिए इस पोस्ट के अंत में देखें।
अब ऐसे बहुत सारे लोग हैं जिनके पास यह त्रुटि संदेश है, और उन पर बहुत अधिक प्रतिक्रियाएं हैं। वास्तव में निराशा की बात यह है कि हर कोई यह अनुमान लगा रहा है कि इस मुद्दे को कैसे सुलझाया जा सकता है, लेकिन कोई भी इस बात की ओर इशारा नहीं करता है कि समस्या के कई संभावित कारणों में से किसकी पहचान की जाए।
मैंने त्रुटि के लिए इन 5 संभावित कारणों को एकत्र किया है और यह सत्यापित करने के लिए कि वे मेरे सिस्टम पर मौजूद नहीं हैं:
/proc/sys/kernel/threads-max
( स्रोत ) में कॉन्फ़िगर किए गए थ्रेड्स की संख्या पर एक सिस्टम-वाइड सीमा है । मेरे मामले में यह निर्धारित है60613
।- हर धागा स्टैक में कुछ जगह लेता है। स्टैक आकार सीमा का उपयोग
ulimit -s
( स्रोत ) कॉन्फ़िगर किया गया है । मेरी खोल के लिए सीमा हुआ करता था8192
, लेकिन मैं रख कर यह वृद्धि हुई है* soft stack 32768
में/etc/security/limits.conf
, यह इतनाulimit -s
अब रिटर्न32768
। मैंने डॉकटर प्रक्रिया के लिए इसे बढ़ा दियाLimitSTACK=33554432
है/etc/systemd/system/docker.service
( स्रोत में डालकर , और मैंने सत्यापित किया कि लिमिट डॉकटर कंटेनर के अंदर/proc/<pid of docker>/limits
और बाहर देखने से लागू होती हैulimit -s
। - हर धागा कुछ स्मृति लेता है। वर्चुअल मेमोरी सीमा का उपयोग करके कॉन्फ़िगर किया गया है
ulimit -v
। मेरे सिस्टम पर यह सेट हैunlimited
, और मेरी 3 जीबी मेमोरी में से 80% मुफ्त हैं। - उपयोग करने की प्रक्रियाओं की संख्या पर एक सीमा है
ulimit -u
। थ्रेड्स इस मामले ( स्रोत ) में प्रक्रियाओं के रूप में गिनती करते हैं । मेरे सिस्टम पर, सीमा निर्धारित है30306
, और docker डेमॉन के लिए और docker कंटेनर के अंदर, सीमा है1048576
। वर्तमान में चलने वाले थ्रेड्स की संख्या को रनिंगls -1d /proc/*/task/* | wc -l
या रनिंगps -elfT | wc -l
( स्रोत ) से पता लगाया जा सकता है । मेरे सिस्टम पर वे700
और के बीच हैं800
। - खुली फ़ाइलों की संख्या पर एक सीमा है, जो कुछ स्रोतों के अनुसार थ्रेड बनाते समय भी प्रासंगिक है। सीमा का उपयोग करके कॉन्फ़िगर किया गया है
ulimit -n
। मेरे सिस्टम और डॉकटर के अंदर, सीमा निर्धारित है1048576
। ओपन फाइल की संख्याlsof | wc -l
( स्रोत ) का उपयोग करके पता लगाया जा सकता है , मेरे सिस्टम के बारे में30000
।
ऐसा लगता है कि पिछले रिबूट से पहले मैं कर्नेल 4.2.5-1 चला रहा था, अब मैं 4.3.3-2 चला रहा हूं। डाउनग्रेड करने के लिए 4.2.5-1 सभी समस्याओं को हल करता है। समस्या का उल्लेख अन्य पदों हैं इस और इस । मैंने आर्क लिनक्स के लिए एक बग रिपोर्ट खोली है ।
कर्नेल में क्या बदलाव आया है जो इसका कारण हो सकता है?
यहां कुछ उदाहरण त्रुटि संदेश दिए गए हैं:
Crash dump was written to: erl_crash.dump
Failed to create aux thread
Jan 07 14:37:25 edeltraud docker[30625]: runtime/cgo: pthread_create failed: Resource temporarily unavailable
dpkg: unrecoverable fatal error, aborting:
fork failed: Resource temporarily unavailable
E: Sub-process /usr/bin/dpkg returned an error code (2)
test -z "/usr/include" || /usr/sbin/mkdir -p "/tmp/lib32-popt/pkg/lib32-popt/usr/include"
/bin/sh: fork: retry: Resource temporarily unavailable
/usr/bin/install -c -m 644 popt.h '/tmp/lib32-popt/pkg/lib32-popt/usr/include'
test -z "/usr/share/man/man3" || /usr/sbin/mkdir -p "/tmp/lib32-popt/pkg/lib32-popt/usr/share/man/man3"
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: No child processes
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: No child processes
/bin/sh: fork: retry: No child processes
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: No child processes
/bin/sh: fork: Resource temporarily unavailable
/bin/sh: fork: Resource temporarily unavailable
make[3]: *** [install-man3] Error 254
Jan 07 11:04:39 edeltraud docker[780]: time="2016-01-07T11:04:39.986684617+01:00" level=error msg="Error running container: [8] System error: fork/exec /proc/self/exe: resource temporarily unavailable"
[Wed Jan 06 23:20:33.701287 2016] [mpm_event:alert] [pid 217:tid 140325422335744] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread