Mengapa tidak bisa melewati 4096 maks file terbuka untuk pengguna non-root?

13

Saya sepertinya tidak bisa meningkatkan nofilebatas untuk pengguna non-root di Ubuntu 14.04, meskipun mengikuti setiap jawaban StackExchange terkait dengan masalah ini. Sejauh ini saya punya:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

$ cat /proc/sys/fs/file-max
101232

Reboot, login, dan:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted

Ada masih entah bagaimana tampaknya menjadi batas 4096 max untuk pengguna non-root.

Koma Kafein
sumber
Saya mengalami masalah yang sama persis di desktop Ubuntu 16.10. Tidak peduli apa yang saya coba, batasannya adalah 1024 atau 4096.
NathanAldenSr

Jawaban:

13

Menggunakan Ubuntu 14.04 saya mendapat batas keras yang dijelaskan:

user@notebook:~$ ulimit -Hn 4096  

Saya bisa menurunkannya menggunakan ulimit, tetapi tidak menambahnya, seperti pertanyaan yang menggambarkannya. Seperti yang dijelaskan dalam panduan ulimit:

hanya root yang dapat meningkatkan batas hard

Jadi saya mencoba menetapkan batas yang lebih tinggi /etc/security/limits.confseperti ini:

user hard nofile 9999 

dan info masuk baru seperti ssh localhost -l usermemberi saya batas baru:

user@notebook:~$ ulimit -Hn 9999

Semoga ini bekerja untuk Anda juga.

TomTomTom
sumber
Terima kasih TomTomTom. Saya sudah memiliki perubahan di /etc/security/limits.d/custom.conf. Saya memang mencoba memasukkannya langsung ke /etc/security/limits.conf seperti yang Anda sarankan, dan saya masih mendapatkan "bash: ulimit: buka file: tidak dapat mengubah batas: Operasi tidak diizinkan".
Caffeine Coma
Saya - tebak saja - salah satu dari dua alasan, mengapa itu tidak berhasil untuk Anda:
TomTomTom
1
Butuh waktu terlalu lama untuk mengedit komentar tidak lengkap. Ini dia: I - tebak saja - satu dari dua alasan, mengapa ini tidak berhasil untuk Anda: 1. /etc/security/limits*tidak dibaca oleh mekanisme login Anda - karena alasan yang belum diketahui. 2. Batas keras Anda ditetapkan ke 4096 di tempat lain, dan "hanya root yang dapat meningkat ...". Anda mungkin memeriksa profil Anda seperti .bashrc(tergantung pada shell Anda), atau Anda mungkin memeriksa /etctempat lain, di mana batas mungkin ditetapkan, seperti find /etc | grep -e ulimit -e 4096 -e nofile. BTW: apakah Anda mencoba ssh? Dan: sudahkah Anda berubah /etc/ssh/sshd.confuntuk menghindari PAM karena suatu alasan?
TomTomTom
Ya- semua login adalah melalui ssh. Saya telah menonaktifkan UsePAM - beberapa panduan merekomendasikan ini sebagai bagian dari hanya mengizinkan login berbasis ssh-key. Saya akan mencoba menyalakannya sementara, hanya untuk melihat apakah itu masalahnya. Terima kasih!
Caffeine Coma
Afaik, PAM adalah apa yang harus dibaca /etc/security/limits*- Anda mungkin mencoba mengaktifkan PAM hanya untuk memeriksa ini. Saya akan mencoba menonaktifkan PAM untuk melihat, apa bedanya dan akan melaporkan hasilnya. --- Iya! itu dia! Dengan PAM dinonaktifkan batas saya adalah 4096, juga, meskipun diatur ke 9999 in /etc/security/limits.conf.
TomTomTom
4

Artikel ini , saya pikir membahas masalah Anda.

Pada dasarnya Anda harus menggunakan perintah ulimit untuk meningkatkan sumber daya yang tersedia.

Sebagai contoh:

Gunakan perintah perintah berikut untuk menampilkan jumlah maksimum deskriptor file terbuka:

cat /proc/sys/fs/file-max

Untuk melihat nilai keras dan lunak, keluarkan perintah sebagai berikut:

# ulimit -Hn
# ulimit -Sn

Untuk melihat nilai keras dan lunak untuk pengguna httpd atau oracle, jalankan perintah sebagai berikut:

# su - username

Untuk memperbaiki jumlah file maksimum, Anda dapat meningkatkan jumlah maksimum file terbuka dengan menetapkan nilai baru dalam variabel kernel / proc / sys / fs / file-max sebagai berikut (login sebagai root):

# sysctl -w fs.file-max=100000

Perintah di atas memaksa batas hingga 100000 file. Anda perlu mengedit /etc/sysctl.conffile dan meletakkan baris berikut sehingga setelah reboot pengaturan akan tetap seperti apa adanya. Untuk melakukan itu, tambahkan direktif konfigurasi sebagai berikut:

fs.file-max = 100000

Simpan dan tutup file. Pengguna harus keluar dan masuk lagi untuk perubahan yang berlaku atau cukup ketik perintah berikut:

# sysctl -p

Verifikasi pengaturan Anda dengan perintah:

# cat /proc/sys/fs/file-max

atau:

# sysctl fs.file-max

Prosedur di atas menetapkan batas deskriptor file sistem (FD) seluruh sistem, namun Anda dapat membatasi httpd(atau pengguna lain) pengguna untuk batas tertentu dengan mengedit /etc/security/limits.conffile dengan mengedit /etc/security/limits.confdan menetapkan batas-batas sebagai berikut:

httpd soft nofile 4096
httpd hard nofile 10240

Kemudian periksa dengan:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Jika Anda memiliki masalah pada distribusi Linux lain, periksa /etc/pam.d/logindan pastikan Anda telah pam_limits.sodiaktifkan, mis

session required pam_limits.so
Brooke Fogg-Wolfe
sumber
2
Hai Brooke. Sayangnya, saya sudah mencoba saran dari artikel itu. Meskipun 'ulimit -Hn' baru bagi saya; itu mencetak 4096, batas saya terus menabrak.
Caffeine Coma
0

Jika ini adalah Layanan, Anda dapat mencoba mengatur batas dalam /etc/systemd/system/{ServiceName}.servicetambahLimitNOFILE=65536

Maicon Santana
sumber
Ubuntu 14.04 tidak menggunakan systemd secara default.
nomor 5
Ubuntu 16.04, Tomcat 8 bekerja untuk saya
Arjang