• 周二. 10 月 8th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

nginx 报错 too many open files

admin

11 月 28, 2021
系统访问异常,登录到后台查看nginx日志,发现error.log中出现大量的(to many open files)的问题。
遇到这种情况一般排查两个地方:
1、linux 打开文件句柄数
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) 63455
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
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) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
 
其中open files 默认为1024,可以将该数字调大,两种方式:
1,执行命令:
ulimit -n 65535
立即生效,重启后失效
2、修改系统配置文件:
vim /etc/security/limits.conf
最文件最后添加
* soft nofile 65535
* hard nofile 65535
 
2、修改nginx
worker_rlimit_nofile 65535
重新加载nginx(  nginx -s reload)
 
lsof:
list open files,列出打开的文件,包括打开的文件、建立的连接(TCP/UDP等)
常用的参数为:
1 lsof abc.txt 显示开启文件abc.txt的进程 2 lsof -c abc 显示出以字母 abc 开头进程现在打开的文件 3 lsof -p 1234 列出进程号为1234的进程所打开的文件 4 lsof -g gname/gid 显示归属gname或gid的进程情况 5 lsof -u uname/uid 显示归属uname或uid的进程情况 6 lsof +d /usr/local/ 显示目录下被进程开启的文件 7 lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长 8 lsof -d 4 显示使用fd为4的进程 9 lsof -i 用以显示符合条件的进程情况 10 lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
 
ningx 调优:
一 nigix配置文件:
1、 worker_processes 8 一般为CPU个数。
2、worker_cpu_affinity 为每个进程分配CPU
3、worker_rlimit_nofile 65535。 这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
4、use poll。使用epoll的I/O模型,是linux内核实现多路复用的一个实现
5、worker_connections 65536,每个进程允许的最多连接数。
6、keepalive_timeout 30;超时时间 秒
其他调优参考:
 
 
 
reference:

我的博客地址:紫荣 || myruhui

发表回复