如何通过连接的端口找出进程

公司的缓存系统这几天出现问题,连接数超出限制的2048,导致应用不能继续工作,我们需要确定是哪一个进程的连接数较多,具体方法如下:

  1. 找出连接缓存服务器的应用系统的端口号

    假设缓存服务器的端口号为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

    ……

    连接缓存系统的端口号为5287852968529625287652852……,这些端口号非常多,有几千条记录。

    #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文件就只剩下端口号了。

  2. 找出端口号对应的进程

    #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

……

29971887就是进程号,2997出现频率较高,该进程连接缓存较多。

#ps –ef |grep2997               查看该进程程序


本文出自 “瑶溪” 博客,请务必保留此出处http://huriver.blog.51cto.com/2745601/1642153

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。