ulimit PICKLE: "Operasi tidak diizinkan" dan "Perintah tidak ditemukan"


15

Saya mencoba meningkatkan jumlah maksimum file terbuka untuk pengguna saat ini

> ulimit -n
1024

Saya berusaha meningkatkan dan gagal sebagai berikut

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

Jadi saya melakukan hal yang wajar dan mencoba lari dengan izin temp, tetapi gagal

> sudo ulimit -n 4096
sudo: ulimit: command not found

Pertanyaan

  1. Bagaimana cara meningkatkan ulimit?
  2. Mengapa ini terjadi?

Menggunakan Fedora 14


Respons terhadap komentar yang dihapus: ulimit 4096tidak berfungsi. Saya pikir -nitu benar. Sebagai bukti konsep berfungsi jika saya pertama kali sudo su - root(tetapi hanya perubahan untuk root).
paislee


Jawaban:


17

ulimitadalah shell built-in, bukan perintah eksternal. Itu perlu dibangun karena itu bertindak pada proses shell itu sendiri, seperti cd: batas, seperti direktori saat ini, adalah properti dari proses tertentu.

sudo bash -c 'ulimit -n 4096'akan bekerja, tetapi itu akan mengubah batas untuk proses bash sudohanya dipanggil , yang tidak akan membantu Anda.

Ada dua nilai untuk setiap batas: batas keras dan batas lunak. Hanya root yang dapat menaikkan batas hard; siapa pun dapat menurunkan batas keras, dan batas lunak dapat dimodifikasi di kedua arah dengan satu-satunya kendala yang tidak boleh lebih tinggi dari batas keras. Batas lunak adalah nilai aktual yang penting.

Oleh karena itu Anda perlu mengatur bahwa semua proses Anda memiliki batas keras untuk membuka file minimal 4096. Anda dapat menjaga batas lunak di 1024. Sebelum meluncurkan proses yang membutuhkan banyak file, naikkan batas lunak. Di /etc/security/limits.conf, tambahkan baris

paislee hard nofile 4096
paislee soft nofile 1024

di mana paisleenama pengguna yang ingin Anda jalankan prosesnya. Di shell yang meluncurkan proses yang Anda inginkan batas yang lebih tinggi, jalankan

ulimit -Sn unlimited

untuk menaikkan batas lunak ke batas keras.


1
Alternatif untuk sudo bash -cyang sudo -iyang dimulai shell login dan sudo -swhcih mulai shell. Batasan yang sama berlaku tetapi ini mungkin berguna dalam keadaan lain.
Bram

Terima kasih. Bolehkah saya mengajukan beberapa pertanyaan terkait? Balasan lain dan poskan stackoverflow.com/a/17483998/156458 dan unix.stackexchange.com/a/238413/674 dan unix.stackexchange.com/a/169035/674 semua direkomendasikan menggunakan sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Tetapi keduanya ulimit -c 1024dan exec su $LOGNAME" hanya mempengaruhi shell yang dibuat oleh sudo, jadi apa tujuan dari perintah itu? exec su $LOGNAME"juga tidak melakukan sesuatu yang berarti untuk menggunakan batas yang diubah. Saya sangat bingung dan bertanya-tanya apakah saya kehilangan sesuatu.
Tim

Harap perhatikan bahwa ulimit -Sn unlimitedsebagian besar shell tidak berfungsi. Metode yang tepat adalah meneleponulimit -a dan kemudian memanggil di ulimit -n <number>mana <angka adalah batas keras (kolom kanan).
schily

3

buka file /etc/security/limits.confdan tambahkan baris <user> soft nofile <value>. untuk menggunakan ulimitperubahan ke root pengguna dan coba yang sama.

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.