在日常运维中,经常有数据库连接过多,但是又不知道是哪些连接,所以可以通过用netstat,awk,sort,uniq,cut,sed组合找到我们想要的答案
netstat分组统计源ip连接数量命令如下:
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c |sort -nr |head -10
结果如下:
[root@host-03 ~]# netstat -ant |awk '{print $5}'|cut -d ":" -f1|sort |uniq -c |sort -nr |head -10
219 172.20.27.94
184 172.20.27.93
173 172.20.27.95
38 0.0.0.0
31
8 172.20.27.135
2 127.0.0.1
解释如下:
netstat -ant 获取网络连接
netstat -ant |awk ‘{print $5}’ 获取第五列,也就是源ip:端口
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1 切割第5列,等同于split,获取切割后的第一个字段,也就是源ip
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c 排序加统计
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c |sort -nr |head -10 再排序取前十
[root@host-03 ~]# netstat -antp |awk '{print $5,$7}'|sed 's/:/ /g'|cut -d " " -f1,3|sort|uniq -c|sort -nr |head -10
58 172.20.27.94 27513/java
51 172.20.27.93 27513/java
45 172.20.27.94 26894/java
45 172.20.27.93 26894/java
40 172.20.27.95 27513/java
31 172.20.27.95 136197/java
31 172.20.27.94 136197/java
31
23 172.20.27.95 26894/java
21 172.20.27.94 27976/redis-server
解释如下:
netstat -antp |awk ‘{print $5,$7}’ 获得第5列和第7列,分割是通过默认的空格
所以要用sed命令将ip:端口中的:转换为空格,方便后续cut进行切割
cut用空格切割后,选1,3列,分别为ip和进程号,然后再分组统计
netstat命令
awk命令
cut命令
sort命令
uniq命令
sed命令



