มีไฟล์ที่เปิดด้วย nginx มากเกินไปดูเหมือนจะเพิ่มขีด จำกัด ไม่ได้


22

เซิร์ฟเวอร์คือ Ubuntu 13.04 (GNU / Linux 3.9.3-x86_64-linode33 x86_64)

nginx คือ nginx / 1.2.6

ฉันทำงานนี้มาหลายชั่วโมงแล้วดังนั้นนี่คือสิ่งที่ฉันได้รับและนี่คือสิ่งที่ฉันทำ

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 ทำงานอยู่:

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

แก้ไขข้อ จำกัด soft / hard ใน /etc/security/limits.conf (การตั้งค่าจากจุดสิ้นสุดของไฟล์)

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

การอ่านไฟล์สูงสุด

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

และใน /etc/pam.d/common-session:

session required pam_limits.so

ด้วยสิ่งนี้ที่เพิ่มเข้ามาและเซิร์ฟเวอร์รีสตาร์ทเพื่อการวัดที่ดีสำหรับ nginx ฉันนับข้อ จำกัด ซอฟต์ / ฮาร์ดโดยรับ PID ของกระบวนการผู้ปกครองและ:

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

กระบวนการหลักทำงานเป็น 'รูต' และ 4 คนทำงานเป็น 'ไม่มีใคร'

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

ฉันลองทุกสิ่งที่ฉันรู้วิธีการทำและสามารถได้รับจาก Google ผมไม่สามารถรับขีด จำกัด ของไฟล์สำหรับ nginx เพื่อเพิ่ม

ช่วยด้วย?

คำตอบ:


32

เพิ่มบรรทัดต่อไปนี้ใน nginx ของคุณและรีสตาร์ทกระบวนการ:

worker_rlimit_nofile 30000;

วิธีนี้จะช่วยให้พนักงานสามารถรับไฟล์ได้มากขึ้น จากนั้นคุณสามารถยืนยันด้วย:

su - nobody
ulimit -Hn
ulimit -Sn

สิ่งนี้ควรส่งออกขีด จำกัด ฮาร์ด / ซอฟต์ใหม่

การอ้างอิง


6
ถ้าคุณจะเปลี่ยนworker_rlimit_nofileการตั้งค่า uWSGI และไม่ข้อ จำกัด ของระบบ (ซึ่งทำงานให้ฉัน), ulimitคุณไม่สามารถตรวจสอบได้ผ่านทาง /proc/<pid of worker>/limitsแต่คุณควรจะดูได้โดยตรงที่
Jan Fabry

ฉันคิดว่าผู้ใช้ (ไม่มีใคร / www-data) ต้องออกจากระบบและกลับเข้ามาเช่น รีสตาร์ทเซิร์ฟเวอร์ ulimit สำหรับฉันแสดงให้เห็นว่ามันเพิ่มขึ้น แต่กระบวนการยังคง จำกัด ตาม cat / proc / {pid} / จำกัด
felix

@felix OP กล่าวถึงพวกเขารีสตาร์ทเซิร์ฟเวอร์แล้ว แต่ใช่จำเป็นต้องมี
นาธานซี

3

ในอูบุนตูให้แก้ไข /etc/pam.d/su เพิ่มหรือยกเลิกการคอมเม้นต์ของบรรทัดที่ต้องการ pam_limits.so

นอกจากนี้ใน /etc/security/limits.conf ตรวจสอบให้แน่ใจว่าคุณมีแท็บระหว่างอักขระและไม่เว้นวรรค


1

ให้แน่ใจว่าคุณใช้คำสั่งต่อไปนี้หลังจากแก้ไขไฟล์เหล่านั้น

sysctl -p

จากนั้นรีสตาร์ท nginx


1
ไม่มีผลกระทบ ขีด จำกัด ยังคงเหมือนเดิม
Geuis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.