Ini terjadi pada Ubuntu Release 12.04 (tepat) 64-bit Kernel Linux 3.2.0-25-virtual
Saya mencoba meningkatkan jumlah file terbuka yang diizinkan untuk pengguna. Ini untuk aplikasi java gerhana saya di mana batas saat ini 1024 tidak cukup.
Menurut posting yang saya temukan sejauh ini, saya seharusnya bisa memasukkan garis
/etc/security/limits.conf menyukai ini:
soft nofile 4096
hard nofile 4096
untuk meningkatkan jumlah file terbuka yang diizinkan untuk semua pengguna.
Tapi itu tidak berfungsi untuk saya dan saya pikir masalahnya tidak terkait dengan file itu.
Untuk semua pengguna, batas default adalah 1024, terlepas dari apa yang ada di /etc/security/limits.conf (saya reboot setelah mengubah file itu)
$ ulimit -n
1024
Sekarang, meskipun ada entri di /etc/security/limits.conf saya tidak bisa meningkatkannya:
$ ulimit -n 2048
-bash: ulimit: buka file: tidak dapat mengubah batas: Operasi tidak diizinkan Bagian yang aneh adalah bahwa saya dapat mengubah batas ke bawah , tetapi tidak dapat mengubahnya ke atas - bahkan untuk kembali ke nomor yang di bawah batas asli:
$ ulimit -n 800
$ ulimit -n
800
$ ulimit -n 900
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Sebagai root, saya dapat mengubah batas itu ke apa pun yang saya inginkan, naik atau turun. Bahkan tampaknya tidak peduli tentang batas sistem yang seharusnya dalam / proc / sys / fs / file-max
# cat /proc/sys/fs/file-max
188897
# ulimit -n 188898
# ulimit -n
188898
Tetapi bahkan saya mendapatkan gerhana untuk dijalankan sebagai root, aplikasi saya masih macet karena pengecualian "Terlalu Banyak Buka File"!
Sejauh ini, saya belum menemukan cara untuk meningkatkan batas file terbuka untuk pengguna non-root.
Bagaimana seharusnya saya melakukan ini dengan benar? Saya telah melihat beberapa posting lain tetapi tidak berhasil!
/etc/security/limits.conf
, Anda mungkin harus keluar dan kembali sebelum Anda dapat menggunakan batas maksimum yang baru. Saya melakukan ini, dan bingung denganulimit -Hs
masih menampilkan 1000 ketika saya baru saja menaikkannya menjadi 10.00000! Kemudian saya logout dan kembali, dan ulimit menunjukkan jumlah yang baru.Jawaban:
The
ulimit
perintah secara default perubahan batas-batas KERAS, yang Anda (pengguna) dapat menurunkan, tapi tidak bisa menaikkan.Gunakan opsi -S untuk mengubah batas SOFT , yang dapat berkisar dari 0- { HARD }.
Saya benar-benar alias
ulimit
untukulimit -S
, jadi default untuk batas lembut sepanjang waktu.Adapun masalah Anda, Anda kehilangan kolom di entri Anda di
/etc/security/limits.conf
.Seharusnya ada EMPAT kolom, tetapi yang pertama tidak ada dalam contoh Anda.
Kolom pertama menjelaskan kepada WHO batasan yang harus dilamar. '*' adalah wildcard, artinya semua pengguna. Untuk menaikkan batas root , Anda harus secara eksplisit memasukkan 'root' daripada '*'.
Anda juga perlu mengedit
/etc/pam.d/common-session*
dan menambahkan baris berikut sampai akhir:sumber
/etc/pam.d/common-session*
dan baru dieditcommon-session
, dan bahkan setelah reboot tidak berhasil. Tetapi setelah menambahkan baris yang sama (untukpam_limits.so
) kecommon-session-noninteractive
,ulimit -n
ditampilkan nilai baru setelah login baru (tidak perlu reboot). FWIW Saya mencoba mengubah batas untuk root (hanya).Jika Anda menggunakan batas lunak dan keras per pengguna, Anda dapat menggunakan sesuatu seperti:
untuk memeriksa apakah pengaturan Anda berfungsi untuk pengguna tertentu atau tidak.
sumber
Saya memiliki banyak masalah untuk menjalankan ini.
Menggunakan berikut ini memungkinkan Anda untuk memperbaruinya terlepas dari izin pengguna Anda.
sumber
$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024