某個線上系統平時非常穩定,當大量更新資料時,系統的服務就會嚴重超時。問題存在了一段時間,基本猜測系統超時和大量寫入資料有關,但卻無法給出確切的解釋。最近花了幾天時間,深入研究這個問題。首先是需要給出問題原因的確切解釋。因此,需要監控服務不正常期間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即可實現定時啟動、收集一定時間間隔的效能資料。
#!/bin/bashecho
"$0 start...
"`date
`echo
iostat -dmxt 1 $1
echo
"$0 finish.
"`date`
#!/bin/bashecho
"$0 start...
"`date
`echo
mpstat -p all 1 $1
echo
echo
"$0 finish.
"`date`
#!/bin/bashnum=5000000
if [[ $# -gt 0
]]then
num=$1
fiecho
"$0 start test...`date`
"echo
#for i in `seq
0 $num` # if
num is large, waste much resource.
#for i in # must be constant
i=0while [[ i -lt $num ]]
doecho `date
` netstat -anp -u # udp only -t --tcp
echo
sleep
1((i++))
done
echo
"$0 finish test.`date`
"
Linux效能監控工具
top 顯示所有程序情況,vmstat 顯示系統活動,硬體和系統資訊,uptime,w 顯示系統的平均負載,ps,pstree 顯示程序,free 如果不帶任何引數輸入,預設是以kb為單位輸出 記憶體使用情況,iostat 顯示cpu負載和磁碟活動資訊,sar 收集和報告系統的狀態,mpstat 在...
Linux效能監控工具
top 顯示所有程序情況,vmstat 顯示系統活動,硬體和系統資訊,uptime,w 顯示系統的平均負載,ps,pstree 顯示程序,free 如果不帶任何引數輸入,預設是以kb為單位輸出 記憶體使用情況,iostat 顯示cpu負載和磁碟活動資訊,sar 收集和報告系統的狀態,mpstat 在...
Linux效能監控 vmstat
r the number of processes waiting for run time.等待執行的程序數 b the number of processes in uninterruptible sleep.處在非中斷睡眠狀態的程序數 swpd the amount of virtual me...