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。
posted @ 2022-05-09 15:04  tangshow  阅读(394)  评论(0编辑  收藏  举报