缘起
某个线上系统平时非常稳定,当大量更新数据时,系统的服务就会严重超时。问题存在了一段时间,基本猜测系统超时和大量写入数据有关,但却无法给出确切的解释。最近花了几天时间,深入研究这个问题。首先是需要给出问题原因的确切解释。因此,需要监控服务不正常期间linux系统的各种性能。
Linux性能检测工具
top -- 查看进程活动状态以及一些系统状况,常用于查看CPU、内存异常的进程PID。
free -- 查看系统整体内存状况。
vmstat -- 查看系统状态、硬件和系统信息等。查看CPU使用情况、上下文切换情况、进程数(是否过多?)。
iostat -- 查看CPU 负载,硬盘状况。常用于查看IO状况(查看CPU的工具很多)
sar -- 综合工具,查看系统状况。这个太强大了,但自己一般只用类监控网络状况(sar -n DEV|EDEV)
mpstat -- 查看多处理器状况,类似vmstat,适用于多CPU场景(还有非多CPU的服务器不?)
netstat -- 查看网络状况。常用于:产看进程监听的端口、各个端口的recv|send队列状况(是否过载)、收发包的简单统计
iptraf -- 实时网络状况监测。
tcpdump -- 抓取网络数据包,详细分析。强大的网络包分析工具。
tcptrace -- 数据包分析工具。
netperf -- 网络带宽工具。
dstat -- 综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息。
监控脚本
常用工具如上,一般情况下,直接启动命令看输出。但有时需要监控某个特定时间系统的运行状况,简单办法就是定时启动命令,并将命令输入打印到log, 或者使用诸如sar这类强大的性能监视工具。
贴几个监控工具的包装脚本,结合crontab即可实现定时启动、收集一定时间间隔的性能数据。
iostat:
#!/bin/bash echo "$0 Start... "`date` echo iostat -dmxt 1 $1 echo "$0 Finish. "`date`
mpstat:
#!/bin/bash echo "$0 Start... "`date` echo mpstat -P ALL 1 $1 echo echo "$0 Finish. "`date`
netstat:
#!/bin/bash NUM=5000000 if [[ $# -gt 0 ]] then NUM=$1 fi echo "$0 Start test...`date`" echo #for i in `seq 0 $NUM` # if NUM is large, waste much resource. #for i in {1..100} # {1..100} must be constant i=0 while [[ i -lt $NUM ]] do echo `date` netstat -anp -u # udp only -t -- tcp echo sleep 1 ((i++)) done echo "$0 Finish test.`date`"
相关文章: