代码改变世界

linux性能监控

2012-06-17 15:30  zhenjing  阅读(3836)  评论(0编辑  收藏  举报

缘起

某个线上系统平时非常稳定,当大量更新数据时,系统的服务就会严重超时。问题存在了一段时间,基本猜测系统超时和大量写入数据有关,但却无法给出确切的解释。最近花了几天时间,深入研究这个问题。首先是需要给出问题原因的确切解释。因此,需要监控服务不正常期间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`"

相关文章:

Linux Debug tools
linux 下的sar工具命令小结