আমি বেশ কয়েকটি ধারক সহ আর্চ লিনাক্স (কার্নেল ৪.৩.৩-২) এ একটি ডকার সার্ভার চালাচ্ছি। আমার শেষ পুনরায় বুট হওয়ার পরে, ধারকগুলির মধ্যে ডকার সার্ভার এবং এলোমেলো প্রোগ্রাম উভয়ই একটি থ্রেড তৈরি করতে না পারার বার্তা সহ বা ক্র্যাক করার জন্য (কম প্রায়ই) ক্র্যাশ। প্রোগ্রামের উপর নির্ভর করে নির্দিষ্ট ত্রুটি বার্তাটি ভিন্ন, তবে তাদের বেশিরভাগই নির্দিষ্ট ত্রুটির উল্লেখ করেছেন বলে মনে হয় Resource temporarily unavailable
। কিছু উদাহরণের ত্রুটি বার্তাগুলির জন্য এই পোস্টের শেষে দেখুন।
এখন প্রচুর লোক রয়েছে যাদের এই ত্রুটি বার্তা রয়েছে এবং তাদের কাছে প্রচুর প্রতিক্রিয়া। সত্যিই হতাশার বিষয়টি হ'ল সকলেই এই সমস্যাটি কীভাবে সমাধান করা যেতে পারে তা অনুমান করছেন বলে মনে করছেন, তবে সমস্যার সম্ভাব্য কারণগুলির মধ্যে কোনটি উপস্থিত রয়েছে তা সনাক্ত করার জন্য কেউ উল্লেখ করতে পারে বলে মনে হয় না।
আমি ত্রুটির জন্য এই 5 টি সম্ভাব্য কারণ সংগ্রহ করেছি এবং কীভাবে যাচাই করা যায় যে সেগুলি আমার সিস্টেমে উপস্থিত নেই:
/proc/sys/kernel/threads-max
( উত্স ) এ কনফিগার করা থ্রেডের সংখ্যার জন্য সিস্টেম-বিস্তৃত সীমা রয়েছে । আমার ক্ষেত্রে এটি সেট করা আছে60613
।- প্রতিটি থ্রেড স্ট্যাকের কিছু জায়গা নেয়। স্ট্যাকের আকার সীমাটি
ulimit -s
( উত্স ) ব্যবহার করে কনফিগার করা হয়েছে । আমার শেল সীমা ব্যবহার করা হয়8192
, কিন্তু আমি নির্বাণ দ্বারা এটি বেড়ে গেছে* soft stack 32768
মধ্যে/etc/security/limits.conf
, তাইulimit -s
এখন আয়32768
। আমিও নির্বাণ দ্বারা Docker প্রক্রিয়ার জন্য এটা বেড়ে গেছেLimitSTACK=33554432
মধ্যে/etc/systemd/system/docker.service
( উৎস , এবং আমি যাচাই যে সীমা মধ্যে খুঁজছেন দ্বারা প্রযোজ্য/proc/<pid of docker>/limits
এবং চলমান দ্বারাulimit -s
একটি Docker ধারক ভিতরে। - প্রতিটি থ্রেড কিছু স্মৃতি লাগে। একটি ভার্চুয়াল মেমরি সীমা ব্যবহার করে কনফিগার করা হয়েছে
ulimit -v
। আমার সিস্টেমে এটি সেট করা আছেunlimited
এবং আমার 3 জিবি মেমরির 80% বিনামূল্যে। - ব্যবহার প্রক্রিয়া সংখ্যার একটি সীমা আছে
ulimit -u
। এই ক্ষেত্রে প্রক্রিয়া হিসাবে উত্স গণনা ( উত্স )। আমার সিস্টেমে সীমাটি সেট করা আছে30306
এবং ডকার ডিমন এবং ডকার পাত্রগুলির ভিতরে সীমাটি1048576
। বর্তমানে চলমান থ্রেডগুলির সংখ্যা দৌড়েls -1d /proc/*/task/* | wc -l
বা চালিতps -elfT | wc -l
( উত্স ) দ্বারা খুঁজে পাওয়া যাবে । আমার সিস্টেমে তারা700
এবং এর মধ্যে রয়েছে800
। - খোলা ফাইলগুলির সংখ্যার একটি সীমা রয়েছে, যা কিছু উত্স অনুসারে থ্রেড তৈরি করার সময়ও প্রাসঙ্গিক। সীমাটি ব্যবহার করে কনফিগার করা হয়েছে
ulimit -n
। আমার সিস্টেমে এবং ডকারের ভিতরে, সীমাটি সেট করা আছে1048576
। আমার সিস্টেমেlsof | wc -l
( উত্স ) ব্যবহার করে খোলা ফাইলগুলির সংখ্যা খুঁজে পাওয়া যাবে30000
।
দেখে মনে হচ্ছে শেষ রিবুটের আগে আমি কার্নেলটি ৪.২.৫-১ চালাচ্ছি, এখন আমি ৪.৩.৩-২ চালাচ্ছি। 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