कांटा: पुनः प्रयास करें: संसाधन अस्थायी रूप से अनुपलब्ध [बंद]


80

मैंने अपने कंप्यूटर पर Intel MPI बेंचमार्क स्थापित करने की कोशिश की और मुझे यह त्रुटि मिली:

fork: retry: Resource temporarily unavailable

तब मैं फिर से जब मैं भागा इस त्रुटि प्राप्त lsऔर topआदेश।

इस त्रुटि के कारण क्या है?

मेरी मशीन का विन्यास:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)

प्रक्रियाओं की संख्या बढ़ाने के बारे में अपने लिनक्स दस्तावेज़ देखें।
theglauber

2
शायद इससे मदद मिलेगी: stackoverflow.com/questions/344203/…
theglauber

जवाबों:


82

यह आमतौर पर फ़ाइल डिस्क्रिप्टर से बाहर चलने के कारण होता है।

वहाँ सिस्टम कुल फ़ाइल डिस्क्रिप्टर सीमा है, आपको कमांड से क्या मिलता है:

sysctl fs.file-nr

यह फाइल डिस्क्रिप्टर की गणना करता है:

<in_use> <unused_but_allocated> <maximum>

यह जानने के लिए कि क्या उपयोगकर्ता फ़ाइल डिस्क्रिप्टर की सीमा पर कमांड चला रहे हैं:

sudo su - <username>
ulimit -Hn

यह जानने के लिए कि उपयोगकर्ता द्वारा कमांड चलाने पर कितने फ़ाइल डिस्क्रिप्टर का उपयोग होता है:

sudo lsof -u <username> 2>/dev/null | wc -l

तो अब अगर आप एक सिस्टम फाइल डिस्क्रिप्टर लिमिट इश्यू कर रहे हैं, तो आपको अपनी /etc/sysctl.conf फाइल को एडिट करना होगा या इसे जोड़ना होगा, या इसे पहले से मौजूद मॉडिफाई करना होगा, fffile-max वाली लाइन और इसे वैल्यू लार्ज पर सेट करें। आपके द्वारा आवश्यक फ़ाइल डिस्क्रिप्टर की संख्या और रिबूट करने के लिए पर्याप्त है।

fs.file-max = 204708

15
FYI करें, आप "sysctl -p" का उपयोग वर्तमान सेटिंग्स को /etc/sysctl.conf में रीबूट को सहेजने के लिए कर सकते हैं।
EmmEff

2
इसके अलावा, यदि आपने केवल / etc पढ़ा है, तो आप रन-टाइम पर 'sysctl -w fs.file-max = 204708' का उपयोग कर सकते हैं।
ओन्ड्रेज गाल्बावी

आप इसे सीधे रिबूट के बिना कर्नेल में जोड़ सकते हैं लेकिन स्थायी रूप से 'इको 999999> / proc / sys / fs / file-max' पर नहीं
मैट्सन केप्सन

50

एक और संभावना बहुत अधिक धागे है। थ्रेड पूल का उपयोग करने वाले ऐप के खिलाफ टेस्ट हार्नेस चलाने पर हम बस इस त्रुटि संदेश में भाग गए। हमने इस्तेमाल किया

watch -n 5 -d "ps -eL <java_pid> | wc -l"

दिए गए जावा प्रोसेस आईडी के भीतर चल रहे लिनक्स देशी धागों की गिनती देखना। इसके बाद लगभग 1,000 (हमारे लिए - YMMV) हिट हो गए, हमें आपके द्वारा उल्लिखित त्रुटि संदेश मिलना शुरू हो गया।


2
जब मैंने परीक्षण किया, ps -eLसभी प्रक्रियाओं ps -L <pid>को दिखाने के लिए काम किया और संबंधित प्रक्रियाओं को दिखाने के लिए काम किया <pid>ps -eL <pid>सिर्फ परवाह किए बिना सभी प्रक्रियाओं को दिखाता है <pid>
सांग्युन ली

1
@Willie Wheeler आपने थ्रेड लिमिट को पार करने के लिए क्या किया? मैं DAYS के लिए, बिना किसी लाभ के ऑनलाइन पाए गए कई समाधानों की खोज और परीक्षण कर रहा हूं। 1k से अधिक थ्रेड्स कुछ भी नहीं होने देंगे, सिवाय systemd-logind के फिर से शुरू करने के लिए, जो फिर से त्रुटियों से पहले लगभग एक घंटे तक रहता है!
ब्रैंडन इलियट

मशीनों में परिमित संसाधन होते हैं। यदि आप एक सीमा मार रहे हैं, तो कम थ्रेड्स (उदाहरण के लिए थ्रेड पूल के साथ नियंत्रित) या अधिक मशीनों का उपयोग करें।

मैंने अपने रेल सर्वर को पुनः आरंभ किया
thedanotto

2
1000 थ्रेड हालांकि बहुत कुछ नहीं है
फ्रैंकनस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.