Terlalu banyak membuka file dengan nginx, sepertinya tidak dapat menaikkan batas


22

Servernya adalah Ubuntu 13.04 (GNU / Linux 3.9.3-x86_64-linode33 x86_64).

nginx adalah nginx / 1.2.6.

Saya sudah mengerjakan ini selama beberapa jam sekarang, jadi inilah yang saya dapatkan dan inilah yang saya lakukan.

tail -f /usr/local/nginx/logs/error.log
2013/06/18 21:35:03 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:05 [crit] 3426#0: accept4() failed (24: Too many open files)

Nginx running:

geuis@localhost:~$ ps aux | grep nginx
root      3422  0.0  0.0  39292   380 ?        Ss   21:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    3423  3.7 18.8 238128 190848 ?       S    21:30   0:13 nginx: worker process      
nobody    3424  3.8 19.0 236972 192336 ?       S    21:30   0:13 nginx: worker process      
nobody    3426  3.6 19.0 235492 192192 ?       S    21:30   0:13 nginx: worker process      
nobody    3427  3.7 19.0 236228 192432 ?       S    21:30   0:13 nginx: worker process      
nobody    3428  0.0  0.0  39444   468 ?        S    21:30   0:00 nginx: cache manager process

Batas lunak / keras yang dimodifikasi di /etc/security/limits.conf (pengaturan dari akhir file)

root soft  nofile 65536
root hard  nofile 65536

www-data soft nofile 65536
www-data hard nofile 65536

nobody soft nofile 65536
nobody hard nofile 65536

Pembacaan file maks

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

Dan di /etc/pam.d/common-session:

session required pam_limits.so

Dengan ini ditambahkan dan server restart untuk ukuran yang baik, untuk nginx saya menghitung batas lunak / keras dengan mendapatkan PID proses induk dan:

cat /proc/<PID>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

Proses induk berjalan sebagai 'root' dan 4 pekerja berjalan sebagai 'tidak ada'.

root      2765  0.0  0.0  39292   388 ?        Ss   00:03   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    2766  3.3 17.8 235336 180564 ?       S    00:03   0:21 nginx: worker process      
nobody    2767  3.3 17.9 235432 181776 ?       S    00:03   0:21 nginx: worker process      
nobody    2769  3.4 17.9 236096 181524 ?       S    00:03   0:21 nginx: worker process      
nobody    2770  3.3 18.3 235288 185456 ?       S    00:03   0:21 nginx: worker process      
nobody    2771  0.0  0.0  39444   684 ?        S    00:03   0:00 nginx: cache manager process

Saya sudah mencoba semua yang saya tahu bagaimana melakukannya dan telah dapat saya peroleh dari Google. Saya tidak bisa mendapatkan batas file untuk nginx meningkat.

Membantu?

Jawaban:


32

Tambahkan baris berikut ke nginx Anda dan mulai ulang proses:

worker_rlimit_nofile 30000;

Ini akan memungkinkan para pekerja untuk mengambil lebih banyak file. Anda kemudian dapat memverifikasi dengan:

su - nobody
ulimit -Hn
ulimit -Sn

Ini akan menghasilkan batas keras / lunak baru.

Referensi


6
Jika Anda hanya mengubah worker_rlimit_nofilepengaturan uWSGI dan bukan batas sistem (yang berfungsi untuk saya), Anda tidak dapat memverifikasinya melalui ulimit. Sebaliknya, Anda harus melihat langsung /proc/<pid of worker>/limits.
Jan Fabry

Saya pikir pengguna (tidak ada / www-data) harus keluar dan kembali. Yaitu. restart server. ulimit bagi saya menunjukkan bahwa ini meningkat, tetapi prosesnya masih terbatas sesuai kucing / proc / {pid} / Limit
felix

@ Feliks OP menyebutkan mereka sudah me-restart server, tapi ya, ini diperlukan.
Nathan C

3

Di Ubuntu, edit /etc/pam.d/su tambahkan atau batalkan komentar pada sesi baris yang diperlukan pam_limits.so

Juga, di /etc/security/limits.conf pastikan Anda memiliki TABS antara karakter dan bukan spasi.


1

pastikan Anda menjalankan perintah berikut setelah mengedit file-file itu

sysctl -p

Kemudian mulai kembali nginx


1
Tidak berpengaruh. Batasnya tetap sama.
Geuis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.