मैं लिनक्स में खुली फ़ाइलों की संख्या को कैसे बदलूं? [बन्द है]


194

अपने एप्लिकेशन को चलाते समय मुझे कभी-कभी एक त्रुटि मिलती है too many files open

रनिंग ulimit -aरिपोर्ट्स कि सीमा 1024 है। मैं 1024 से ऊपर की सीमा कैसे बढ़ा सकता हूं?

ulimit -n 2048अनुमति त्रुटि में परिणाम संपादित करें


इसे भी देखें: unix.stackexchange.com/a/8949/231660
लड़के

मैं अभी इसके माध्यम से सेंटोस 7 (आरएचईएल पर समान) पर गया और इसे कवर करते हुए एक ब्लॉग पोस्ट बनाया क्योंकि मुझे इन सभी पोस्टों के साथ भी बहुत परेशानी हुई थी: कोडिंग-stream-of-consciousness.com/2018/12/21/… । अक्सर खुली फाइलों के साथ, आपको nproc को बढ़ाने की आवश्यकता होती है जो वास्तव में कई सेटिंग्स फ़ाइलों में रहता है ... और यदि आप systemd / systemctl का उपयोग करते हैं जिसकी अपनी अलग सेटिंग्स हैं। यह एक प्रकार का मेवा है।
जॉन हम्फ्रीज़ - w00te

यदि आप लिनक्स पर VSCode का उपयोग कर रहे हैं तो यह मदद मिल सकती है: stackoverflow.com/a/55027686/1190948
Juri Sinitson

जवाबों:


153

तुम हमेशा एक कोशिश कर सकता है ulimit -n 2048। यह केवल आपके वर्तमान शेल के लिए सीमा को रीसेट करेगा और आपके द्वारा निर्दिष्ट संख्या हार्ड सीमा से अधिक नहीं होनी चाहिए

प्रत्येक ऑपरेटिंग सिस्टम में कॉन्फ़िगरेशन फ़ाइल में एक अलग हार्ड लिमिट सेटअप होता है। उदाहरण के लिए, सोलारिस पर हार्ड ओपन फाइल लिमिट / etc / सिस्टम से बूट पर सेट की जा सकती है।

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

OS X पर, इसी डेटा को /etc/sysctl.conf में सेट किया जाना चाहिए।

kern.maxfilesperproc=166384
kern.maxfiles=8192

लिनक्स के तहत, ये सेटिंग्स अक्सर /etc/security/limits.conf में होती हैं।

दो प्रकार की सीमाएँ हैं:

  • नरम सीमाएं वर्तमान में लागू सीमाएं हैं
  • कठोर सीमाएं अधिकतम मान को चिन्हित करती हैं जिन्हें एक नरम सीमा निर्धारित करके पार नहीं किया जा सकता है

सॉफ्ट सीमाएं किसी भी उपयोगकर्ता द्वारा निर्धारित की जा सकती हैं, जबकि हार्ड सीमा केवल रूट द्वारा परिवर्तनशील हैं। सीमाएं एक प्रक्रिया की एक संपत्ति हैं। उन्हें विरासत में मिला है जब एक बच्चे की प्रक्रिया बनाई जाती है तो सिस्टम-वाइड सीमा को इनिट स्क्रिप्ट में सिस्टम इनिशियलाइज़ेशन के दौरान सेट किया जाना चाहिए और उपयोगकर्ता सीमाएँ pam_limits का उपयोग करके उपयोगकर्ता लॉगिन के दौरान सेट की जानी चाहिए।

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


4
क्या आप मुझे बता सकते हैं कि विंडोज़ में इसका उपयोग कैसे करें?
प्रीतम

@hoyhoy मैं इसे बदल सकता हूं 2048लेकिन ऐसा 4500क्यों नहीं ? इसे देखें
अल्हलाल

@GaneshKrishnan आपके द्वारा उल्लिखित लिनक्स फाइलों में क्या जोड़ना है?
अविरल सांझ

@Pritam विंडोज में कोई भी नहीं है ulimit। आपको यह निर्दिष्ट करना होगा कि आप क्या उपयोग कर रहे हैं (जैसे WSL, Cygwin)।
मेलेबियस

99

यदि आप लिनक्स का उपयोग कर रहे हैं और आपको अनुमति त्रुटि मिली है, तो आपको /etc/limits.confया /etc/security/limits.confफ़ाइल (जहां फ़ाइल स्थित है, आपके विशिष्ट लिनक्स वितरण पर निर्भर करता है) में अनुमत सीमा को बढ़ाने की आवश्यकता होगी ।

उदाहरण के लिए, मशीन पर किसी को भी 10000 तक की खुली फ़ाइलों की संख्या बढ़ाने की अनुमति देने के लिए limits.confफ़ाइल में लाइन जोड़ें ।

* hard nofile 10000

फिर अपने सिस्टम में लॉगआउट करें और पुनः करें और आपको ऐसा करने में सक्षम होना चाहिए:

ulimit -n 10000

बिना अनुमति त्रुटि के।


6
नोट: वाइल्डकार्ड उपयोगकर्ता पर लागू नहीं होता है rootroot hard nofile 10000यदि आप rootसीमा को समायोजित करना चाहते हैं तो आपको निर्दिष्ट करना होगा ।
जोशुआ पिंटर

1
@ जोशप्रांत हाहा, मैंने पिछले 3 घंटे बिताए हैं या इसलिए हर एक ट्यूटोरियल के माध्यम से जाना कि कैसे बदलना है ulimitऔर अंत में पता चला कि मैं रूट के रूप में लॉग इन हूं। इसलिए मैं 1024 में देखता रहा ulimit -a। मैंने वाइल्डकेयर बदल दिया, और एक *अंदर जोड़ा limits.conf। अब सब अच्छा है, (ssh कीज़ का उपयोग कर रहे हैं चिंता न करें: P) - धन्यवाद !!!
NiCk न्यूमैन

1
@NiCkNewman मुझे खुशी है कि आप इसके बारे में हंस रहे हैं! यह एक प्रोग्रामर / sysops व्यक्ति में एक अच्छा लक्षण है। मैंने एक ही काम किया और इतना जोशपूर्ण नहीं था। यह मदद की खुशी है! :)
जोशुआ पिंटर

समर्थन: आप इस dir में भी एक विन्यास पा सकते हैं /etc/security/limits.d/:।
वाल्डेमर वोसिस्की

2
मैंने पहली बार /etc/security/limits.conf खोला है और देखा है कि सब कुछ वहाँ टिप्पणी करता है। "हार्ड नोफाइल" का डिफ़ॉल्ट मान क्या है?
ka3ak

36

1) निम्नलिखित पंक्ति को इसमें जोड़ें /etc/security/limits.conf

webuser hard nofile 64000

फिर वेबसर्वर के रूप में लॉगिन करें

su - webuser

2) वेबसर्वर के लिए दो फ़ाइलों का पालन करें

append .bashrc और .bash_profile फ़ाइल चलाकर

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) लॉग आउट करें, फिर लॉग इन करें और सत्यापित करें कि परिवर्तन सही ढंग से किए गए हैं:

$ ulimit -a | grep open
open files                      (-n) 64000

यह और उन्हें उछाल, उछाल उछाल।


9
यदि आपको अपनी लाइन को सीमा में बदलना है तो 'हार्ड' से 'सॉफ्ट' में बदल दें, यह नया डिफॉल्ट बन जाना चाहिए और बैश प्रोफाइल में बदलाव की आवश्यकता नहीं है।
ऋषिदि

लगता है कि आप एक अतिरिक्त कदम दोहरा रहे हैं। अकेले सीमा निर्धारित करना प्रोफाइल के समान ही होगा, लेकिन सभी सत्रों में।
एडी

6

यदि आपकी कुछ सेवाएं ulimits में चल रही हैं, तो कभी-कभी उपयुक्त आदेशों को सेवा की init-script में डालना आसान होता है। उदाहरण के लिए, जब अपाचे रिपोर्टिंग कर रहा है

[अलर्ट] (११) संसाधन अस्थायी रूप से अनुपलब्ध: apr_thread_create: श्रमिक धागा बनाने में असमर्थ

ulimit -s unlimitedमें डालने का प्रयास करें /etc/init.d/httpd। इसके लिए सर्वर रिबूट की आवश्यकता नहीं है।

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