sar命令在这里用于査看TCP连接状态,其中的一些输出说明如下。
active/s表示每秒本地发起的TCP连接数,即通过connect调用创建的TCP连接数。
passive/s表示每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接数。
TCP连接数可以用来判断性能问题是否由建立了过多的连接造成,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是由网络环境恶劣,或者服务器压力过大导致丢包造成的。
通过ETCP关键字可以査看TCP层的错误统计,包括重试、断连、重传、错误等。
atmptf/s表示每秒重试失败数。
estres/s表示每秒断开连接数。
retrans/s表示每秒重传数。
isegerr/s表示每秒错误数。
另外,通过如下命令可以统计服务器上各个状态的连接数。
netstat -n | awk '/Atcp/ (++S[$NF]} END (for(a in S)print a,S[a]}
返回结果示例如下:
其中,SYN_RECV表示正在等待处理的连接数,ESTABLISHED表示正常数据传输状态的连接数,TIME_WAIT表示处理完毕,等待超时结束的连接数。
注意
TIME_WAIT状态的连接数的值过高会占用大量连接,影响系统的负载能力,需要调整参数,以尽快释放TIME_WAIT状态的连接。
_般TCP相关的内核参数在/etc/sysctl.conf文件中。为了能够尽快释放TIME_WAIT状态的连接,可以做以下配置:
上面讲解的都是日常工作中最实用的命令,一般在定位问题的时候是比较常用的。而在压测过程中,还需要收集每个时间点的状态。从最早的nmon工具,到后来的Zabbix,此处是作者自己写Shell脚本来搭建收集每个时间点的监控指标平台,供读者借鉴。
该脚本通过sar、top、free等上述常用命令,按一定的时间间隔收集数据,存入InfluxDB时序数据库中,以便后续图形化展示。该脚本是基于CentOS6和CentOS7编写的,如代码清单1-2所示,读者可以根据自己的需要进行微调和增加监控内容。
代码清单1-2monitor_centos.sh