พฤติกรรมแปลก ๆ กับ ulimit บน Mac OS X 10.6


8

ฉันมีพฤติกรรมแปลก ๆ บางอย่างเมื่อทำงานกับ ulimit ฉันเพิ่งเปิดเปลือกใหม่

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$ 

ตอนนี้ f *** คืออะไร?

ถ้าฉันพยายาม 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ไม่ได้ทำในสิ่งที่คุณคิด มันวางไข่การประมวลผลย่อย (รูท), ตั้งค่าขีด จำกัด การเปิดไฟล์สำหรับกระบวนการย่อยนั้น, จากนั้นออกจากกระบวนการย่อย ข้อ จำกัด คือการตั้งค่าตามกระบวนการดังนั้น sudo'ing การเปลี่ยนแปลงที่ทำไม่ได้มีประโยชน์อะไร


สวัสดีกอร์ดอนขอบคุณสำหรับคำอธิบายที่ดี น่าเศร้าที่ฉันยังไม่สามารถเอาชนะคำตอบของคุณได้ - แต่มันช่วยได้มาก!

ดังนั้นหากมีการตั้งค่าขีด จำกัด ฮาร์ดเราจะเพิ่มขีด จำกัด ฮาร์ดได้อย่างไร
เกอร์

@ รวม: ฉันไม่คิดว่าคุณสามารถ - นั่นคือสิ่งที่ทำให้มันเป็นขีด จำกัด ในระบบปฏิบัติการบางระบบรูทสามารถเพิ่มขีด จำกัด สูงสุดของกระบวนการอื่น ๆ ได้ แต่ฉันไม่คิดว่าจะเป็นไปได้ใน OS X
Gordon Davisson

ขอบคุณ ฉันตั้งใจตั้งไว้ต่ำเกินไปซึ่งทำให้ระบบของฉันใช้งานไม่ได้ รีบูตดูเหมือนจะแก้ไขได้
greg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.