緣起
某個線上系統平時非常穩定,當大量更新數據時,系統的服務就會嚴重超時。問題存在了一段時間,基本猜測系統超時和大量寫入數據有關,但卻無法給出確切的解釋。最近花了幾天時間,深入研究這個問題。首先是需要給出問題原因的確切解釋。因此,需要監控服務不正常期間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`"
相關文章: