一、查看连接数,活跃的连接数是76,closed是10w+ 我靠
ss -s
Total: 134694 (kernel 255721)
TCP: 112583 (estab 76, closed 112491,
通过排查发现netstat命令和ss命令无法查看 closed 的状态,只能查看close_wait的状态。
二、一般会没有正确关闭连接导致,项目关闭socket出现了问题,首先定位到是哪个进程导致的。
定位进程:
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204
57 24244
57 24231 ........
其中第一列是打开的句柄数,第二列是进程ID。
可以根据ID号来查看进程名。
# ps aef|grep 24204
但是这个命令运行特别慢,线上机器不建议这么运行。
节省资源命令运行:
for i in `ls /proc/|xargs`;do echo "${i}-`ll /proc/${i}/fd|wc -l`";done|awk -F '-' '$2>=1000{print $0}'
进程-----文件句柄数量
三、进行限制
查看进程的文件句柄的限制
cat /proc/63305/limits |grep files
Max open files 4000000 4000000 files
进行限制
执行
prlimit --pid <pid> --nofile=<number>
命令,其中<pid>
是你想要限制文件句柄数量的进程的ID,<number>
是你想要限制的最大文件句柄数量。例如,如果要将进程ID为1234的进程的文件句柄数量限制为1000,可以执行以下命令:
prlimit --pid 1234 --nofile=1000
这将将进程1234的文件句柄限制为1000。请注意,这种方法需要root权限或者进程的所有者权限。
有问题请加博主微信进行沟通!
全部评论