下面这一行命令可以输出当前的ESTABLISHED和TIME_WAIT数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
下面这一行命令也可以输出当前的ESTABLISHED和TIME_WAIT数
netstat -ant | awk '
{++s[$NF]} END {for(k in s) print k,s[k]}
'
下面这一行命令也可以输出当前的ESTABLISHED和TIME_WAIT数
ss -ant | awk '
{++s[$1]} END {for(k in s) print k,s[k]}
'
查看这两个状态的详情
netstat -antp
关键词释义
time_wait 是「主动关闭 TCP 连接」一方的状态,可能是「客服端」的,也可能是「服务器端」的。
time_wait 高并发情况下数据量大几百几千很正常。不需要对这个调优。不然会出现其他不可预知的问题(实际上就是通过性能换效率- TCP通过四次握手完成发完数据,会到这个状态,为避免数据出错,这个状态下的数据会进行重发,如果直接CLOSE。万一数据发送失败(报文),重发机制失效,那么TCP的所谓可靠性就降低了,即变得不可靠了(类UDP-个人理解))
专业回答如下:
time_wait 状态,存在的
必要性
:
可靠的实现 TCP 全双工连接的终止:四次挥手关闭 TCP 连接过程中,最后的 ACK 是由「主动关闭连接」的一端发出的,如果这个 ACK 丢失,则,对方会重发 FIN 请求,因此,在「主动关闭连接」的一段,需要维护一个 time_wait 状态,处理对方重发的 FIN 请求;处理延迟到达的报文:由于路由器可能抖动,TCP 报文会延迟到达,为了避免「延迟到达的 TCP 报文」被误认为是「新 TCP 连接」的数据,则,需要在允许新创建 TCP 连接之前,保持一个不可用的状态,等待所有延迟报文的消失,一般设置为 2 倍的 MSL(报文的最大生存时间),解决「延迟达到的 TCP 报文」问题.
线程查看
// 打印所有进程及其线程
pstree -p
// 打印某个进程的线程数
pstree -p {pid} | wc -l
打印当前地址IP链接情况
netstat -antp |grep "ESTABLISHED" |awk '{print $5}'|awk -F : '{print $4}'|sort |uniq -c