hành vi lạ với ulimit trên Mac OS X 10.6


8

Tôi nhận được một số hành vi rất kỳ lạ khi làm việc với ulimit. Tôi vừa mở một cái vỏ mới

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

Ok, đó dường như là mặc định ngay cả khi tôi đặt giới hạn cho các tệp trong /etc/launchd.conf là không chính xác. Nhưng đó là một câu hỏi cho một ngày khác.

Bây giờ tôi tăng số lượng tệp lên 1024 và hãy xem lại các cài đặt mới.

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

Được rồi, nó hoạt động. mát mẻ! Bây giờ hãy thay đổi cài đặt một lần nữa

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

Một lần nữa hoạt động tốt đẹp độc đáo. Cho phép thay đổi một lần nữa với giá trị cao hơn

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

Bây giờ là cái gì vậy?

Nếu tôi cố gắng sudo điều này, tôi không gặp lỗi nhưng giá trị cũng không bị thay đổi.

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

Chuyện gì đang xảy ra ở đây?

Tôi hoàn toàn bối rối!

Bất kỳ trợ giúp nào cũng được đánh giá rất cao...

Robertj

Câu trả lời:


18

Có hai điều khiến bạn bối rối. Đầu tiên là có cả giới hạn cứng và mềm cho mỗi tài nguyên. ulimit -n 512thiết lập cả hai , nhưng ulimit -achỉ hiển thị giới hạn mềm. Khi giới hạn cứng được đặt, nó chỉ có thể được giảm.

$ 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

Điều thứ hai làm bạn bối rối là sudo ulimitkhông làm những gì bạn nghĩ. Nó sinh ra một quy trình con (gốc), đặt giới hạn tệp mở cho quy trình con đó và sau đó thoát khỏi quy trình con. Các giới hạn là một cài đặt theo quy trình, do đó, việc thay đổi chúng không làm gì hữu ích.


Xin chào Gordon, cảm ơn vì lời giải thích tuyệt vời. Đáng buồn là tôi chưa thể đưa ra câu trả lời của bạn - nhưng nó đã giúp rất nhiều!

Vậy nếu đặt giới hạn cứng, làm thế nào để chúng ta tăng giới hạn cứng?
greg

@greg: Tôi không nghĩ bạn có thể - đó là những gì làm cho nó trở thành một giới hạn cứng. Trên một số HĐH, root có thể tăng giới hạn cứng đối với các tiến trình khác, nhưng tôi không nghĩ thậm chí điều đó có thể xảy ra trên OS X.
Gordon Davisson

Cảm ơn. Tôi vô tình đặt nó quá thấp, điều này khiến cho hệ thống của tôi không thể sử dụng được. Một khởi động lại dường như để sửa nó.
greg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.