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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.