Bagaimana cara mengubah batas jumlah file terbuka di Linux? [Tutup]

194

Saat menjalankan aplikasi saya, terkadang saya mendapatkan kesalahan too many files open.

Menjalankan ulimit -alaporan bahwa batasnya adalah 1024. Bagaimana cara meningkatkan batas di atas 1024?

Edit ulimit -n 2048 hasil dalam kesalahan izin.

John Meagher
sumber
lihat juga: unix.stackexchange.com/a/8949/231660
Guy Avraham
Saya baru saja membahas ini pada Centos 7 (sama dengan RHEL) dan membuat posting blog yang membahasnya karena saya mempunyai banyak masalah bahkan dengan semua posting ini: coding-stream-of-cadaranness.com/2018/12/21/… . Seringkali bersama dengan file yang terbuka, Anda perlu menambah nproc yang sebenarnya berada di beberapa file pengaturan ... dan jika Anda menggunakan systemd / systemctl yang memiliki pengaturan terpisah. Ini semacam kacang.
John Humphreys - w00te
Jika Anda menggunakan VSCode di linux, solusi ini mungkin membantu: stackoverflow.com/a/55027686/1190948
Juri Sinitson

Jawaban:

153

Anda selalu dapat mencoba melakukan ulimit -n 2048. Ini hanya akan mengatur ulang batas untuk shell Anda saat ini dan jumlah yang Anda tentukan tidak boleh melebihi batas hard

Setiap sistem operasi memiliki pengaturan batas keras yang berbeda dalam file konfigurasi. Misalnya, batas file yang sulit dibuka pada Solaris dapat diatur saat boot dari / etc / system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

Pada OS X, data yang sama ini harus ditetapkan di /etc/sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Di Linux, pengaturan ini sering di /etc/security/limits.conf.

Ada dua macam batasan:

  • batas lunak hanyalah batas yang diberlakukan saat ini
  • batas keras menandai nilai maksimum yang tidak dapat dilampaui dengan menetapkan batas lunak

Batas lunak dapat diatur oleh pengguna mana pun sementara batas keras hanya dapat diubah oleh root. Batas adalah properti dari suatu proses. Mereka diwariskan ketika proses anak dibuat sehingga batas seluruh sistem harus ditetapkan selama inisialisasi sistem dalam skrip init dan batas pengguna harus ditetapkan selama login pengguna misalnya dengan menggunakan pam_limits.

Seringkali ada pengaturan default saat mesin melakukan boot. Jadi, meskipun Anda dapat mereset ulimit Anda di shell individu, Anda mungkin menemukan itu mengembalikan ke nilai sebelumnya pada reboot. Anda mungkin ingin grep skrip boot Anda untuk perintah ulimit keberadaan jika Anda ingin mengubah default.

hoyhoy
sumber
4
dapatkah Anda memberi tahu saya cara menggunakan ini di windows?
Pritam
@ hoyhoy, saya bisa mengubahnya 2048tetapi tidak 4500mengapa? lihat ini
alhelal
@ GaneshKrishnan apa yang harus ditambahkan dalam file linux yang telah Anda sebutkan?
aviral sanjay
@Pritam Windows tidak punya ulimit. Anda harus menentukan apa yang Anda gunakan (mis. WSL, Cygwin).
Melebius
99

Jika Anda menggunakan Linux dan Anda mendapatkan error izin, Anda akan perlu untuk menaikkan batas diperbolehkan dalam /etc/limits.confatau /etc/security/limits.confberkas (di mana file berada tergantung pada distribusi Linux tertentu).

Misalnya untuk mengizinkan siapa saja di mesin meningkatkan jumlah file terbuka mereka hingga 10.000, tambahkan baris ke limits.conffile.

* hard nofile 10000

Kemudian logout dan masuk kembali ke sistem Anda dan Anda seharusnya dapat melakukannya:

ulimit -n 10000

tanpa kesalahan izin.

Jonathan Stanton
sumber
6
CATATAN: Wildcard tidak berlaku untuk rootpengguna. Anda harus menentukan root hard nofile 10000apakah Anda ingin menyesuaikan rootbatas.
Joshua Pinter
1
@JoshPinter Haha, saya hanya menghabiskan 3 jam terakhir atau lebih melalui setiap tutorial tentang cara mengubah ulimitdan akhirnya menemukan saya login sebagai root. Itu sebabnya saya terus melihat 1024 di ulimit -a. Saya mengubah perawatan liar, dan menambahkan bagian *dalam limits.conf. Semuanya baik sekarang, (saya menggunakan kunci ssh jangan khawatir: P) - Terima kasih !!!
NiCk Newman
1
@NiCkNewman Saya senang Anda menertawakannya! Itu adalah sifat yang baik pada orang programmer / sysop. Saya melakukan hal yang sama dan tidak begitu periang. Senang itu membantu! :)
Joshua Pinter
Suplement: Anda mungkin menemukan juga config di dir ini: /etc/security/limits.d/.
Waldemar Wosiński
2
Saya telah membuka /etc/security/limits.conf untuk pertama kalinya dan memperhatikan bahwa semuanya dikomentari di luar sana. Apa nilai default "hard nofile"?
ka3ak
36

1) Tambahkan baris berikut ke /etc/security/limits.conf

webuser hard nofile 64000

lalu masuk sebagai pengguna web

su - webuser

2) Edit dua file berikut untuk pengguna web

tambahkan file .bashrc dan .bash_profile dengan menjalankan

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Keluar, lalu masuk kembali dan verifikasi bahwa perubahan telah dilakukan dengan benar:

$ ulimit -a | grep open
open files                      (-n) 64000

Itu saja dan mereka boom, boom boom.

Vikrant Telkar
sumber
9
Jika Anda dapat mengubah baris Anda dalam membatasi.conf dari 'sulit' menjadi 'lunak' itu harus menjadi default baru dan tidak memerlukan perubahan pada profil bash.
RishiD
Sepertinya Anda mengulangi langkah tambahan. Menetapkan batas saja akan melakukan hal yang sama dengan profil, tetapi di semua sesi.
Eddie
6

Jika beberapa layanan Anda menolak keras, terkadang lebih mudah untuk memasukkan perintah yang sesuai ke skrip init layanan. Misalnya, ketika Apache melaporkan

[alert] (11) Sumber daya tidak tersedia untuk sementara: apr_thread_create: tidak dapat membuat utas pekerja

Mencoba untuk menempatkan ulimit -s unlimitedke dalam /etc/init.d/httpd. Ini tidak memerlukan reboot server.

Sysadmin
sumber