服务器closed连接数超过10w???

412人浏览 / 0人评论

 

一、查看连接数,活跃的连接数是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权限或者进程的所有者权限。

全部评论