linux程序提示too many open files或者网络连接数1000左右上不去客户在线数1000左右上不去
linux centos7上程序提示too many open files或者网络连接数1000左右上不去客户在线数1000左右上不去
显现描述:
centso7系统的上的某wss服务故障,当客户端在线数量达到1k左右,打开浏览器调试,刷新页面后wss消息一直pending中
wss服务日志提示 ...too many open files...
故障原因:
受到系统打开文件数限制,进程打开数量达到1024左右便受限不能继接受新用户连接,若用户数量为2k,则有1k左右的用户连接不上。
故障排除处理流程
查看该服务对应进程的限制情况
使用 ps -ef |grepxx 查看进程id
使用 cat /proc/进程id/limits 查看资源限制情况,注意查看标记处值为1024
使用lsof -p 进程id | wc -l 统计进程实际打开的文件数
#有可能会执行很久
临时解决办法-不用重启主机
1.关闭服务
2.设置临时参数
ulimit -n 102400
3.在该ssh终端下重启服务
#注意:设置临时参数只在当前ssh终端有效,所有必须在当期那ssh终端重启服务
永久解决办法
/etc/security/limits.conf
/etc/security/limits.d/xx-nproc.conf
cat /proc/sys/fs/file-max
vim /etc/sysctl.conf
fs.file-max = 6553600
https://www.lnmpweb.cn/archives/7326
拓展
ulimit用法:
可用来控制shell执行程序的资源。
-a 显示目前资源限制的设定。
-c <core文件上限> 设定core文件的最大值,单位为区块。
-d <数据节区大小> 程序数据节区的最大值,单位为KB。
-f <文件大小> shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小> 指定可使用内存的上限,单位为KB。
-n <文件数目> 指定同一时间最多可开启的文件数。
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。
-s <堆叠大小> 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t <CPU时间> 指定CPU使用时间的上限,单位为秒。
-u <程序数目> 用户最多可开启的程序数目。
-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。