公司的缓存系统这几天出现问题,连接数超出限制的2048,导致应用不能继续工作,我们需要确定是哪一个进程的连接数较多,具体方法如下:
找出连接缓存服务器的应用系统的端口号
假设缓存服务器的端口号为11111,
#netstat –an |grep 11111 查找连接缓存服务器的应用端口号
tcp 0 0 xx.xx.xx.xa.52878 xx.xx.xx.xb.11111 ESTABLISHED
tcp 0 0 xx.xx.xx.xa.52968 xx.xx.xx.xb.11111 ESTABLISHED
tcp 0 0 xx.xx.xx.xa.52952 xx.xx.xx.xb.11111 ESTABLISHED
tcp 0 0 xx.xx.xx.xa.52876 xx.xx.xx.xb.11111 ESTABLISHED
tcp 0 0 xx.xx.xx.xa.52852 xx.xx.xx.xb.11111 ESTABLISHED
……
连接缓存系统的端口号为52878,52968,52962,52876,52852,……,这些端口号非常多,有几千条记录。
#netstat –an|grep 11111 |awk ‘{print $4}’ >/tmp/netlog.txt 抽取出这些端口号
xx.xx.xx.xa.52878
xx.xx.xx.xa.52968
xx.xx.xx.xa.52952
xx.xx.xx.xa.52876
xx.xx.xx.xa.52852
……
#vi/tmp/netlog.txt 使用vi编辑器打开/tmp/netlog.txt文件,删除IP地址
:1,$s/^.\{12\}//g 非编辑模式下输入,前面12个字符的IP使用空格替换
编辑完成后netlog.txt文件就只剩下端口号了。
找出端口号对应的进程
#vi /tmp/netlog.sh 逐行扫描netlog.txt文件的端口号,并执行lsof命令
for line in $(cat /tmp/netlog.txt)
do
echo "File:${line}"
lsof –F p -i:${line}
done
#/tmp/netlog.sh > /tmp/netout.txt 执行该脚本文件,并输出。
#cat /tmp/netout.txt 查看该文件,找到端口对应的进程号
P2997
P2997
P2997
P1887
P2997
……
2997和1887就是进程号,2997出现频率较高,该进程连接缓存较多。
#ps –ef |grep2997 查看该进程程序
本文出自 “瑶溪” 博客,请务必保留此出处http://huriver.blog.51cto.com/2745601/1642153
原文地址:http://huriver.blog.51cto.com/2745601/1642153