天天看点

生产环境centos服务器查看TCP连接状态

作者:上班爱摸鱼的IT男

[root@iZj6c23b3wfb3ckcllau87Z ~] # netstat -n |awk '/^tcp/ {++jin[$NF]} END {for(a in jin) print a, jin[a]}'

TIME_WAIT 9137

CLOSE_WAIT 207

FIN_WAIT 547

ESTABLISHED 597

FIN_WAIT2 74

SYN_RECV 70

CLOSING 55

LASK_ACK 8

TIME_WAIT 250

FIN_WAIT1 2

FIN_WAIT2 3

ESTABLISHED 1032

LAST_ACK 2

TIME_WAIT 260

FIN_WAIT2 48

ESTABLISHED 912

TCP连接状态描述说明(netstat 输出)6列

[root@iZj6c23b3wfb3ckcllau87Z ~]# netstat -ntl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN

第一列:socket使用的协议

第二列:接收到的但是还没处理的字节数

第三列:已经发送的但是没有被远程主机确认接收的字节数

第四列:本地的地址和端口

第五列:外部的地址和端口

第六列:socket的状态,通常仅仅有TCP的状态,状态值可能有ESTABLISHED,SYS_SENT,SYN_RECV,FIN_WAIT1,FIN_WAIT2,TIME_WAIT等

ESTABLISHED:socket已经建立连接,表示处于连接的状态,一般认为有一个establish 认为是一个服务的并发连接(*)

SYN_SENT:socket正在积极尝试建立一个连接,即处于发送后连接前的一个等待 但为了匹配进入连接的状态

SYN_RECV:已经从网络上收到一个连接请求

FIN_WAIT1:socket已经关闭连接正在或者要关闭

FIN_WAIT2:连接已经关闭 并且socket正在等待远端结束

TIME_WAIT:socket 正在等待关闭处理仍在网络上的数据包,这个连接状态在生产场景很重要,要重点关注(*)

CLOSE_WAIT:远端已经结束 等待socket关闭

LAST_ACK:远端已经结束 并且socket也已关闭等待acknow -edgement

listen:socket正在监听连接请求

closing:socket关闭 但是我们仍旧没有发生数据

UNKNOWN:未知的状态

获取连接状态数的awk命令:netstat -n|awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'

/^tcp/过滤出tcp开头的行

S[] 定义了一个名叫S的数组 在awk中 数组下标通常从1开始 而不是0

NF 当前记录里域的个数 默认以空格分隔 如上记录NF域个数等于6

$NF 表示一行的最后一个域的值 如上记录 $NF就是$6 表示第六个字段的值 也就是syn_recv或time_wait等

S[$NF] 表示数组元素的值 用最后一个字段的数值作为数组下标 就是第六列 取第六列的输出结果

++S[$NF] 表示把某个数加一 、

END

for(key in S) 遍历数组

print key,"\",S[key] 打印数组的键值对 中间用tab分隔

[root@iZj6c23b3wfb3ckcllau87Z ~]# cat >>aa.txt<<EOF

> 01 name wod 12k

> 02 name lis 9k

> 03 name wd 12k

> 04 name eew 10k

> 05 name ud 12k

> 06 name ol 9k

> 07 name ka 12k

> EOF

[root@iZj6c23b3wfb3ckcllau87Z ~]# cat aa.txt|awk '/^0/ {++J[$NF]} END {for(a in J) print a,"\t",J[a]}'

9k 2

10k 1

12k 4

统计Apache日志 单个IP访问请求数排名(*)

a. awk '{++S[$1]} END {for(jin in S) print jin,S[jin]}' access.log|sort -rn -k2

b. awk '{print $1}' access.log|sort|uniq -c |sort -rn -k1 #$1 第一个域的内容 -k1为对第一个字段排序 uniq -c去重

统计Apache日志单IP访问请求数排名的意义

通过以上命令可以找出什么IP的访问Apache比较频繁,一般单个IP访问数量过百 就值得怀疑了

如果短时间内上万PV访问 说明就不正常了 可以考虑封掉IP 也有可能误封的问题 因为国内公司都是NAT上网的多 出口一个IP

[root@iZj6c23b3wfb3ckcllau87Z tmp]# awk '{++S[$1]} END {for(jin in S) print jin,S[jin]}' access.log|sort -rn -k2|more

14.199.147.159 419

1.171.20.98 85

27.147.41.150 73

49.214.49.119 64

54.199.128.65 47

223.205.232.216 45

223.139.16.19 42

157.36.228.221 42

[root@iZj6c23b3wfb3ckcllau87Z tmp]# awk '{print $1}' access.log|sort|uniq -c |sort -rn -k1 |more

419 14.199.147.159

85 1.171.20.98

73 27.147.41.150

64 49.214.49.119

47 54.199.128.65

45 223.205.232.216

42 223.139.16.19

42 157.36.228.221

40 175.144.108.202

37 220.136.161.18

35 114.38.244.148

34 61.93.167.213

统计服务器当前单IP 连接数最大的IP地址前十

[root@Web ~]# awk -F '[ :]+' '{++S[$6]} END {for (a in S) print a S[a]}' access.log|sort -rn -k2

STREAM4

LISTEN3

I-Node1

Foreign1

established)1

and1

900061

899101

86311

86301

86131

753121

2

192.168.157.1322

113731

113071

0.0.0.06

netstat -an|grep EST|awk -F '[ :]+' '{++S[$6]} END {for (key in S) print "IP:"key"--->",S[key]}' |sort -rn -k2

过滤域名的方法\\

http://www.baidu.com/index.html

http://mail.baidu.com/index.html

http://mp3.baidu.com/index.html

cut -d "/" -f3 access.log|sort |uniq -c

awk -F "/" '{print $3}' access.log|sort|uniq -c

sed 's#^ htt.*\/\/##g' access.log |sed 's#\/.*html$##g'|sort|uniq -c

你学废了吗

生产环境centos服务器查看TCP连接状态

继续阅读