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


Saya tidak bisa meningkatkan nofile membatasi pengguna non-root pada Ubuntu 14.04, meskipun mengikuti setiap jawaban StackExchange yang 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, masuk, dan:

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

Sana masih entah bagaimana tampaknya menjadi batas maksimum 4096 untuk pengguna non-root.


12
2018-03-09 19:30


asal


Saya mengalami itu masalah yang sama persis pada Ubuntu 16.10 desktop. Tidak peduli apa yang saya coba, batasnya adalah 1024 atau 4096. - NathanAldenSr


Jawaban:


Menggunakan Ubuntu 14.04 Saya mendapat batasan keras yang dijelaskan:

user@notebook:~$ ulimit -Hn 4096  

Saya bisa menurunkannya menggunakan ulimit, tetapi tidak meningkatkannya, seperti yang dijelaskan oleh pertanyaan itu. Seperti yang dijelaskan oleh manual ulimit:

hanya root yang dapat meningkatkan batas keras

Jadi saya mencoba menetapkan batas yang lebih tinggi di /etc/security/limits.conf seperti ini:

user hard nofile 9999 

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

user@notebook:~$ ulimit -Hn 9999

Semoga ini juga bermanfaat untuk Anda.


12
2018-03-10 23:43



Terima kasih TomTomTom. Saya sudah memiliki perubahan di /etc/security/limits.d/custom.conf. Saya mencoba memasukkannya langsung ke /etc/security/limits.conf seperti yang Anda sarankan, dan saya masih mendapatkan "bash: ulimit: membuka 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
Butuh waktu terlalu lama untuk mengedit komentar yang tidak lengkap. Di sini kita pergi: Saya - coba tebak - salah satu dari dua alasan, mengapa ini tidak berhasil untuk Anda: 1. /etc/security/limits* tidak dibaca oleh mekanisme login Anda - untuk alasan yang belum diketahui. 2. Batas keras Anda akan diatur ke 4096 di tempat lain, dan "hanya root yang dapat meningkat ...". Anda mungkin memeriksa profil Anda seperti .bashrc(tergantung pada cangkang Anda), atau Anda mungkin memeriksa /etc untuk tempat 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.conf untuk menghindari PAM karena suatu alasan? - TomTomTom
Ya - semua login melalui ssh. Saya telah menonaktifkan UsePAM- beberapa panduan merekomendasikan ini sebagai bagian dari mengizinkan hanya login berbasis ssh-key. Saya akan mencoba mengubahnya untuk 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 nih! itu dia! Dengan PAM dinonaktifkan, batas saya adalah 4096, juga, setelama 9999 masuk /etc/security/limits.conf. - TomTomTom


Ini artikelSaya pikir alamat masalah Anda.

Pada dasarnya Anda harus menggunakan perintah ulimit untuk menambah 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-nilai keras dan lunak, berikan perintah sebagai berikut:

# ulimit -Hn
# ulimit -Sn

Untuk melihat nilai-nilai keras dan lunak untuk pengguna httpd atau oracle, berikan 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 (masuk sebagai root):

# sysctl -w fs.file-max=100000

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

fs.file-max = 100000

Simpan dan tutup file. Pengguna harus keluar dan masuk kembali untuk perubahan 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 batasan deskriptor file (FD) tingkat sistem, namun Anda dapat membatasi httpd (atau pengguna lain) pengguna ke batas tertentu dengan mengedit /etc/security/limits.conf file dengan mengedit /etc/security/limits.conf dan tetapkan batas sebagai berikut:

httpd soft nofile 4096
httpd hard nofile 10240

Kemudian periksa dengan:

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

Jika Anda punya masalah pada distribusi Linux lainnya, periksa /etc/pam.d/login dan pastikan Anda punya pam_limits.so diaktifkan, mis.

session required pam_limits.so

4
2018-03-09 19:37



Hai Brooke. Sayangnya, saya sudah mencoba saran dari artikel itu. Meskipun 'ulimit -Hn' itu baru bagiku; Mencetak 4096, batas yang saya terus tabrak. - Caffeine Coma


Jika ini adalah Layanan, Anda dapat mencoba menetapkan batas /etc/systemd/system/{ServiceName}.service menambahkan LimitNOFILE=65536


0
2017-07-07 15:12



Ubuntu 14.04 tidak menggunakan systemd secara default. - number5
Ubuntu 16.04, Tomcat 8 bekerja untuk saya - Arjang