मैं गैर-रूट उपयोगकर्ता के लिए खुली फ़ाइलों की सीमा कैसे बढ़ाऊं?


143

यह Ubuntu रिलीज़ 12.04 (सटीक) 64-बिट कर्नेल लिनक्स 3.2.0-25-आभासी पर हो रहा है

मैं उपयोगकर्ता के लिए अनुमत खुली फ़ाइलों की संख्या बढ़ाने की कोशिश कर रहा हूं। यह मेरे ग्रहण जावा एप्लिकेशन के लिए है जहां 1024 की वर्तमान सीमा पर्याप्त नहीं है।

अब तक मैंने जिन पदों को पाया है, उसके अनुसार मुझे लाइनों में लगने में सक्षम होना चाहिए

/etc/security/limits.conf इस तरह:

soft nofile 4096
hard nofile 4096

सभी उपयोगकर्ताओं के लिए अनुमत खुली फ़ाइलों की संख्या बढ़ाने के लिए।

लेकिन यह मेरे लिए काम नहीं कर रहा है और मुझे लगता है कि समस्या उस फाइल से संबंधित नहीं है।

सभी उपयोगकर्ताओं के लिए, डिफ़ॉल्ट सीमा 1024 है, जो कि /etc/security/limits.conf में है की परवाह किए बिना (मैंने उस फ़ाइल को बदलने के बाद रिबूट किया)

$ ulimit -n
1024

अब, /etc/security/limits.conf में प्रविष्टियों के बावजूद मैं इसे नहीं बढ़ा सकता:

$ ulimit -n 2048

-बैश: ulimit: खुली हुई फाइलें: सीमा को संशोधित नहीं कर सकता: ऑपरेशन की अनुमति नहीं है अजीब हिस्सा यह है कि मैं सीमा को नीचे की ओर बदल सकता हूं , लेकिन इसे ऊपर की ओर नहीं बदल सकता - यहां तक ​​कि एक संख्या पर वापस जाने के लिए जो मूल सीमा से नीचे है:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

-bash: ulimit: open files: cannot modify limit: Operation not permitted

जड़ के रूप में, मैं उस सीमा को बदल सकता हूं जो मैं चाहता हूं, ऊपर या नीचे। यह कथित रूप से सिस्टम-वाइड लिमिट के बारे में / proc / sys / fs / file-max पर ध्यान नहीं देता है

# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

लेकिन यहां तक ​​कि मुझे रूट के रूप में चलाने के लिए ग्रहण होता है, मेरा एप्लिकेशन अभी भी "बहुत सारे खुले फ़ाइल" अपवाद के कारण क्रैश हो जाता है!

अब तक, मुझे गैर-रूट उपयोगकर्ता के लिए खुली फ़ाइलों की सीमा बढ़ाने का कोई तरीका नहीं मिला है।

मुझे यह कैसे ठीक से करना चाहिए? मैं कई अन्य पदों पर देखा है, लेकिन कोई भाग्य!


6
इसके अलावा, ध्यान दें कि आपके द्वारा संपादित करने के बाद /etc/security/limits.conf, आपको नई अधिकतम सीमा का उपयोग करने से पहले लॉगआउट करना पड़ सकता है। मैंने यह किया था, और ulimit -Hsअभी भी 1000 दिखा कर चकित हो गया था जब मैंने इसे 1000000 तक बढ़ा दिया था! फिर मैंने लॉग आउट किया और वापस अंदर आया और ulimit ने नई राशि दिखाई।
सेरिन

जीयूआई सत्र के लिए आप भी (उबंटू 16+) महत्वपूर्ण मिल सकता है इस सूत्र
वाल्डेमर वोसिस्की

जवाबों:


142

ulimitडिफ़ॉल्ट रूप से आदेश हार्ड सीमा है, जो आप (एक उपयोगकर्ता) कम कर सकते हैं बदलता है, लेकिन बढ़ा नहीं कर सकते।

सॉफ्ट सीमा को बदलने के लिए -S विकल्प का उपयोग करें , जो 0- { HARD } तक हो सकता है।

मैं वास्तव में उर्फ ulimitहै ulimit -S, इसलिए यह हर समय नरम सीमा तक चूक करता है।

alias ulimit='ulimit -S'

अपने मुद्दे के लिए, आप अपनी प्रविष्टियों में एक कॉलम याद कर रहे हैं /etc/security/limits.conf

फ़ोर कॉलम होना चाहिए, लेकिन पहला आपके उदाहरण में गायब है।

* soft nofile 4096
* hard nofile 4096

पहला कॉलम बताता है कि डब्ल्यूएचओ को किसके लिए आवेदन करना है। '*' एक वाइल्डकार्ड है, जिसका अर्थ है सभी उपयोगकर्ता। रूट की सीमाएं बढ़ाने के लिए , आपको स्पष्ट रूप से '*' के बजाय 'रूट' दर्ज करना होगा।

आपको /etc/pam.d/common-session*निम्नलिखित पंक्ति को अंत तक संपादित और जोड़ना होगा:

session required pam_limits.so

1
मैं खुले फ़ाइल डिस्क्रिप्टर की अधिकतम संख्या के लिए हार्ड सीमा कैसे बदल सकता हूं? मेरी समस्या यह है कि मुझे अपने ग्रहण के आवेदन को उतनी ही खुली फ़ाइल की अनुमति देने की आवश्यकता है जितनी वह चाहता है लेकिन 4096 की सीमा पर्याप्त नहीं है और मैं इसे यथासंभव 500000 पर सेट करना चाहता हूं। जैसा कि आपने स्टार के साथ उल्लेख किया है और अभी भी हार्ड लिमिट नहीं चल रही है।
ICODE

1
ठीक है, आपने / proc / sys / fs / file-max का मान 188,897 पाया ... तो मैं कहूंगा कि आपकी ऊपरी सीमा 188,000 (अनुमत) और 500,000 (अनुमत नहीं) के बीच है। दिमाग को लगाता है कि आपको कुछ ऐसा मिला है जिसके लिए 65000 से अधिक खुली फाइलों की आवश्यकता है। वाह। आमतौर पर यह बड़े लोहे पर नियंत्रित किया जाता है। मुझे एक प्रोग्रामिंग, उह, गलत धारणा पर संदेह होगा। (सभी उचित सम्मान के साथ, कृपया)
lornix

4
यह वह था: सत्र आवश्यक pam_limits.so, धन्यवाद!
घातक नोव

13
सबसे पहले मैं वाइल्डकार्ड के अंत में चूक गया /etc/pam.d/common-session*और बस संपादित किया गया common-session, और एक रिबूट के बाद भी यह काम नहीं किया। लेकिन (के लिए एक ही लाइन को जोड़ने के बाद pam_limits.so) के लिए common-session-noninteractive, ulimit -nएक ताजा लॉगिन (कोई रिबूट की आवश्यकता) के बाद नए मूल्य का प्रदर्शन किया। FWIW मैं रूट (केवल) के लिए सीमा को बदलने की कोशिश कर रहा था।
लामार्ट

1
यह भी जांचें कि यदि रूट के रूप में लॉग इन किया गया है तो अलग-अलग मान लें। superuser.com/questions/1200539/…
Robbo_UK

20

यदि आप प्रति उपयोगकर्ता के आधार पर नरम और कठोर सीमा का उपयोग करते हैं तो आप कुछ का उपयोग कर सकते हैं:

su USER --shell /bin/bash --command "ulimit -n"

जाँच करने के लिए कि आपकी सेटिंग उस विशिष्ट उपयोगकर्ता के लिए काम कर रही है या नहीं।


5

मुझे काम करने में बहुत परेशानी हो रही है।

निम्नलिखित का उपयोग करने से आप इसे अपने उपयोगकर्ता की अनुमति के बिना अपडेट कर सकते हैं।

sudo sysctl -w fs.inotify.max_user_watches=100000

4
मैं कोशिश कर रहा हूँ क्योंकि मैं एक ही मुद्दा रहा हूँ, लेकिन यह काम नहीं किया$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.