perilaku aneh dengan ulimit di Mac OS X 10.6

8

Saya mendapatkan perilaku yang sangat aneh ketika bekerja dengan ulimit. Saya baru saja membuka shell baru

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, itu tampaknya menjadi default bahkan jika saya menetapkan batas pada file dalam /etc/launchd.conf menjadi tidak terbatas. Tapi itu pertanyaan lain untuk hari lain.

Sekarang saya menambah jumlah file menjadi 1024 dan mari kita lihat ke pengaturan baru lagi.

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

Oke, itu berhasil. keren! Sekarang mari kita ubah pengaturan lagi

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

Sekali lagi itu bekerja dengan baik. Mari kita ubah lagi ke beberapa nilai yang lebih tinggi

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

Apa-apaan ini sekarang?

Jika saya mencoba sudo ini, saya tidak mendapatkan kesalahan tetapi nilainya tidak berubah juga.

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

Apa yang terjadi disini?

Saya benar-benar bingung!

Bantuan apa pun sangat dihargai ...

Robertj

robertj
sumber

Jawaban:

18

Ada dua hal yang membingungkan Anda. Yang pertama adalah bahwa ada batas keras dan lunak untuk setiap sumber daya. ulimit -n 512mengatur keduanya , tetapi ulimit -ahanya menunjukkan batas lunak. Setelah batas keras ditetapkan, itu hanya dapat dikurangi.

$ 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

Hal kedua yang membingungkan Anda adalah sudo ulimittidak melakukan apa yang Anda pikirkan. Ini memunculkan subproses (root), menetapkan batas file terbuka untuk subproses itu , dan kemudian keluar dari subproses. Batasannya adalah pengaturan per-proses, jadi mendoakan perubahan tidak akan berguna.

Gordon Davisson
sumber
Hai Gordon, terima kasih atas penjelasannya. Sayangnya, saya belum dapat menjawab pertanyaan Anda - tetapi itu sangat membantu!
jadi jika batas keras diatur, bagaimana kita meningkatkan batas keras?
greg
@reg: Saya pikir Anda tidak bisa - itu yang membuatnya menjadi batas yang sulit. Pada beberapa OS, root dapat meningkatkan batas pada proses lain, tapi saya pikir itu tidak mungkin pada OS X.
Gordon Davisson
Terima kasih. Saya tidak sengaja mengaturnya terlalu rendah yang membuat sistem saya tidak dapat digunakan. Boot ulang sepertinya memperbaikinya.
greg