Quá nhiều tệp đang mở với nginx, dường như không thể tăng giới hạn


22

Máy chủ là Ubuntu 13.04 (GNU / Linux 3.9.3-x86_64-linode33 x86_64).

nginx là nginx / 1.2.6.

Tôi đã làm việc này được vài giờ rồi, vì vậy đây là những gì tôi nhận được và đây là những gì tôi đã làm.

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 đang chạy:

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

Đã sửa đổi giới hạn mềm / cứng trong /etc/security/limits.conf (cài đặt từ cuối tệp)

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

Đọc các tệp tối đa

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

Và trong /etc/pam.d/common-session:

session required pam_limits.so

Với điều này được thêm vào và máy chủ được khởi động lại để có biện pháp tốt, đối với nginx, tôi đếm các giới hạn mềm / cứng bằng cách lấy PID của tiến trình cha mẹ và:

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

Quá trình cha mẹ chạy dưới dạng 'root' và 4 công nhân chạy như 'không ai'.

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

Tôi đã thử mọi cách tôi biết cách làm và có thể nhận được từ Google. Tôi không thể tăng giới hạn tập tin cho nginx.

Cứu giúp?

Câu trả lời:


32

Thêm dòng sau vào nginx của bạn và khởi động lại quá trình:

worker_rlimit_nofile 30000;

Điều này sẽ cho phép các công nhân đảm nhận nhiều tập tin hơn. Sau đó, bạn có thể xác minh bằng:

su - nobody
ulimit -Hn
ulimit -Sn

Điều này sẽ tạo ra các giới hạn cứng / mềm mới.

Tài liệu tham khảo


6
Nếu bạn chỉ thay đổi worker_rlimit_nofilecài đặt uWSGI chứ không phải giới hạn hệ thống (hoạt động với tôi), bạn không thể xác minh thông qua ulimit. Thay vào đó, bạn nên nhìn thẳng vào /proc/<pid of worker>/limits.
Jan Fabry

Tôi nghĩ rằng người dùng (không ai / dữ liệu www) phải đăng xuất và đăng nhập lại. khởi động lại máy chủ. Đối với tôi, ulimit cho thấy nó tăng lên, nhưng quá trình vẫn bị giới hạn theo mỗi con mèo / Proc / {pid} / giới hạn
felix

@felix OP đã đề cập họ đã khởi động lại máy chủ rồi, nhưng vâng, điều này là cần thiết.
Nathan C

3

Trong Ubuntu, chỉnh sửa /etc/pam.d/su thêm hoặc bỏ ghi chú phiên dòng yêu cầu pam_limits.so

Ngoài ra, trong /etc/security/limits.conf đảm bảo bạn có TABS giữa các ký tự và không phải khoảng trắng.


1

đảm bảo bạn chạy lệnh sau sau khi chỉnh sửa các tệp đó

sysctl -p

Sau đó khởi động lại nginx


1
Không có hiệu lực. Các giới hạn vẫn giữ nguyên.
Geuis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.