मैक ओएस एक्स 10.6 पर ulimit के साथ अजीब व्यवहार


8

अलिमित के साथ काम करने पर मुझे कुछ बहुत ही अजीब व्यवहार होता है। मैं अभी एक नया खोल खोलती हूं

Hector:~ robertj$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 256 
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 532
virtual memory          (kbytes, -v) unlimited

ठीक है, यह डिफ़ॉल्ट भी प्रतीत होता है यहां तक ​​कि मैं भी /etc/launchd.conf के भीतर फ़ाइलों पर सीमा निर्धारित करता हूं। लेकिन यह एक और दिन के लिए एक और सवाल है।

अब मैं फ़ाइलों की संख्या को 1024 तक बढ़ाता हूं और फिर से नई सेटिंग्स पर एक नजर डालता हूं।

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024

ठीक है, वह काम करता है। ठंडा! अब सेटिंग्स को फिर से बदलने देता है

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512

फिर से कि अच्छी तरह से काम करता है। कुछ उच्च मूल्य पर फिर से परिवर्तन करें

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 

क्या च *** अब यह है?

अगर मैं इसे sudo करने की कोशिश करता हूं तो मुझे कोई त्रुटि नहीं मिलती है, लेकिन मान में बदलाव नहीं होता है।

Hector:~ robertj$ sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 

यहाँ क्या हो रहा है?

मैं पूरी तरह से स्तब्ध हूँ!

कोई भी मदद बहुत ही सराहनीय होगी...

Robertj

जवाबों:


18

आपको भ्रमित करने वाली दो चीजें हैं। पहला यह है कि प्रत्येक संसाधन के लिए कठिन और नरम दोनों सीमाएँ हैं। दोनों को ulimit -n 512सेट करता है, लेकिन ulimit -aकेवल नरम सीमा दिखाता है। एक बार हार्ड लिमिट सेट हो जाने के बाद इसे कम किया जा सकता है।

$ ulimit -n
256
$ ulimit -Hn  # There's no initial hard limit
unlimited
$ ulimit -n 512  # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024  # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted

दूसरी बात जो आपको भ्रमित कर रही है, वह sudo ulimitयह है कि जो आप सोचते हैं वह नहीं करता है। यह (रूट) सबप्रोसेस स्पॉन करता है, उस सबप्रोसेस के लिए ओपन फाइल लिमिट सेट करता है और फिर सबप्रोसेस को बाहर निकालता है। सीमाएँ एक प्रति-प्रक्रिया सेटिंग हैं, इसलिए उनमें परिवर्तन करना कुछ उपयोगी नहीं है।


हाय गॉर्डन, महान विवरण के लिए धन्यवाद। अफसोस की बात है कि मैं अभी तक आपके जवाब को नहीं बढ़ा सकता - लेकिन इससे बहुत मदद मिली!

इसलिए यदि एक कठिन सीमा निर्धारित की जाती है, तो हम कठिन सीमा को कैसे बढ़ाते हैं?
greg

@ समूह: मुझे नहीं लगता कि आप कर सकते हैं - यही वह एक कठिन सीमा बनाता है। कुछ OS पर, रूट अन्य प्रक्रियाओं पर हार्ड सीमा बढ़ा सकता है, लेकिन मुझे नहीं लगता कि OS X पर भी संभव है।
गॉर्डन डेविसन

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