Saya perhatikan bahwa pada gambar CentOS baru yang baru saja saya boot dari EC2 bahwa default ulimit adalah 1024 file terbuka, tetapi / proc / sys / fs / file-max ditetapkan pada 761.408 dan saya bertanya-tanya bagaimana dua batasan ini bekerja bersama. Saya menduga bahwa ulimit -n adalah batas per-pengguna jumlah deskriptor file sementara / proc / sys / fs / file-max luas sistem? Jika itu masalahnya, katakan saya telah login dua kali sebagai pengguna yang sama - apakah setiap pengguna yang login memiliki batas 1024 pada jumlah file yang terbuka, atau apakah itu adalah batas 1024 gabungan file terbuka antara masing-masing yang login di pengguna?
Dan apakah ada banyak dampak kinerja untuk mengatur deskriptor file maks Anda ke angka yang sangat tinggi, jika sistem Anda tidak pernah membuka file yang sangat banyak?
Jawaban:
file-max
adalah Penjelasan File (FD) maksimum yang diberlakukan pada tingkat kernel, yang tidak dapat dilampaui oleh semua proses tanpa meningkatkan. Theulimit
diberlakukan pada tingkat proses, yang bisa kurang dari itufile-max
.Tidak ada risiko dampak kinerja dengan meningkatkan
file-max
. Distribusi modern memiliki set FD maksimum yang cukup tinggi, sedangkan di masa lalu diperlukan kompilasi ulang kernel dan modifikasi untuk meningkat melewati 1024. Saya tidak akan meningkatkan seluruh sistem kecuali Anda memiliki kebutuhan teknis.Konfigurasi per-proses sering kali perlu disetel untuk melayani daemon tertentu, baik itu database atau server Web. Jika Anda menghapus batas seluruhnya, daemon itu berpotensi menghabiskan semua sumber daya sistem yang tersedia; artinya Anda tidak akan dapat memperbaiki masalah kecuali dengan menekan tombol reset atau power cycle. Tentu saja, salah satu dari itu cenderung mengakibatkan korupsi pada semua file terbuka.
sumber
ulimit
batas tidak per pengguna, tapi per proses! Lihat unix.stackexchange.com/questions/55319/…Saya tidak yakin apakah saya benar-benar mengerti arti kalimat itu (Bahasa Inggris bukan bahasa ibu saya) Jika kalimat itu berarti konfigurasi ulimit untuk deskriptor file bukan batasan per proses, jawaban yang diterima (AFAIK) salah.
Yang saya maksud adalah, jika beberapa pengguna telah meluncurkan 4 proses dan konfigurasi ulimit untuk FD adalah 1024, setiap proses dapat membuka 1024 FD. Pengguna tidak akan terbatas pada 1024 FD tetapi proses yang diluncurkan oleh pengguna tersebut.
Sebagai contoh:
Berikut contoh perl tempat kami mencapai batas (ini adalah batas per proses):
Hasil:
1021 karena ada 3 deskriptor file terbuka sebelum mencapai loop sementara (stdout, stdin dan stderr)
Maaf jika saya benar-benar salah atau saya salah paham jawabannya.
sumber