Bagaimana cara menetapkan batas jumlah file yang bisa dibuka oleh Linux?

11

Saya berencana untuk menjalankan aplikasi Java menggunakan nohup ... &. Batas harus berlaku untuk perintah seperti ini.

Ricardo Altamirano
sumber
Tapi ini menyebabkan kesalahan dalam program java saya

Jawaban:

7

Sebagian besar sistem menggunakan PAM , dan memiliki batas pam_limitsmodul yang ditetapkan berdasarkan /etc/security/limits.conf. Batas per pengguna untuk file terbuka disebut nofile. Anda dapat mengaturnya untuk setiap pengguna atau untuk pengguna atau grup tertentu, dan Anda dapat menetapkan batas yang dapat ditimpa pengguna (batas lunak) dan lainnya yang hanya dapat ditimpa oleh root (batas keras). The dokumentasi dan limits.confhalaman manual memiliki rincian. Misalnya, untuk menaikkan batas menjadi 50000 untuk semua orang, masukkan baris ini /etc/limits.conf(pengaturan mulai berlaku saat Anda masuk):

* - nofile 50000
Gilles 'SANGAT berhenti menjadi jahat'
sumber
dalam limits.confdo * hard nofile 50000dan / atau * soft nofile 50000. Saya tidak tahu perbedaan teknis antara keras dan lunak dan selalu melakukan keduanya.
Ron
dalam SLES 11.4 menggunakan tcsh misalnya, seseorang dapat melakukan limit descriptors 50000untuk mengubah nilai dalam jendela / sesi terminal yang diberikan.
Ron
@ron -` di kolom kedua mengatur batas lunak dan keras. Anda hanya perlu mengaturnya secara terpisah jika Anda menginginkan nilai yang berbeda. Batas lunak dapat diubah kapan saja dengan menjalankan ulimitperintah (disebut limitcsh). Pengguna yang tidak memiliki hak tidak akan pernah bisa melampaui batas yang keras.
Gilles 'SANGAT berhenti menjadi jahat'
jika saya hanya mengatur hard, apakah nilai lunak tetap default? jika saya hanya mengatur lunak dan tidak keras, apakah hard tetap nilai standar atau nilai lunak yang pada dasarnya sama? Bisakah saya mengatur soft> hard? Lunak adalah nilai nyata yang berlaku? maaf untuk pertanyaannya.
ron
@ron Batas lunak secara otomatis ditutup pada batas keras. Jika Anda hanya menetapkan batas keras, maka ini menetapkan batas lunak ke maks (default_soft_limit, actual_hard_limit).
Gilles 'SANGAT berhenti menjadi jahat'
4

Anda dapat menambahkan fs.file-max = <your number>ke dalam /etc/sysctl.conf. Kemudian reboot.

pengguna1606
sumber
cat / proc / sys / fs / file-max adalah 169203 , tetapi ulimit -n adalah 1024
Tidak perlu reboot. Lari saja sysctl fs.file-max=123456. ( /etc/sysctl.confDibaca pada saat boot oleh skrip yang memanggil sysctlkonten.)
Gilles 'SO- stop being evil'
3
ulimit -n

dapat memodifikasi per pengaturan proses dan

/proc/sys/fs/file-max

atau variabel sysctl yang dipanggil fs.file-maxdapat digunakan untuk membaca dan mengatur nilai seluruh sistem

PTman
sumber
cat / proc / sys / fs / file-max adalah 169203 , tetapi ulimit -n adalah 1024
1

Anda dapat menggunakan ulimit untuk ini:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Meskipun Anda harus memastikan bahwa membuka begitu banyak pegangan file benar-benar diperlukan sebelum beralih ke penyesuaian seperti itu. Meningkatkan penanganan file maksimum hanya karena Anda lupa melakukan inputstream.close () dalam satu lingkaran hanya akan menunda masalah yang mendasarinya.


sumber
1
Saya ingin terhubung ke banyak klien
1

Gunakan ulimit (perintah Bash - man bash atau temukan yang serupa untuk shell Anda) per instance program. Jangan gunakan batas sistem global jika Anda tidak tahu apa yang Anda lakukan - kemungkinan DoS.

teZeriusz
sumber
Dalam SLES 11.4 Saya telah ditetapkan nofiledalam limits.confmenjadi 100000 berhasil. Saya dapat membuktikan bahwa pengaturan nilai yang terlalu besar mencegah login berikutnya dengan SSH dan saya harus mem-boot dari dvd untuk mengoreksi nilai tersebut di Limit.conf untuk memulihkan sistem.
Ron
0
vi ~/.bashrc

Dan tambahkan baris di akhir file

ulimit -n 169203
Paulo Tomé
sumber