记一个Nginx 报Too many open files 的坑.
之前服务器初始化的时候就将 Max open files以及Max processes修改至65535 / 31027了。通过ulimit -a可以看到
[root@nginx /]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 31027 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65535 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 31027 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
结果查看nginx的线程发现还是有问题。 Max open files 变成1024和4096了.
[root@nginx /]# cat /proc/11288/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 31027 31027 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 31027 31027 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
再往上查了资料之后发现 如果是以服务启动的情况下。是需要再服务里面定义的。打开/etc/systemd/system/multi-user.target.wants/nginx.service
再Service节点加入
LimitNOFILE=1000000
LimitNPROC=65535
然后systemctl nginx restart之后 就恢复了。再看nginx日志也没有Too many open files了。
[root@nginx /]# cat /proc/30040/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 1000000 1000000 processes Max open files 65535 65535 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 63296 63296 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us