【應用類型分類】
系統結構從上向下、操作系統資源從下向上,2種方式分析。
IO bound:表示高負荷的內存使用以及存儲系統,大量數據處理的存儲過程。如:mysql、oracle異常。
CPU bound:高負荷的cpu佔用,一個批量處理cpu請求以及數學計算的過程。如webserver、mailsever
【定位分析】
CPU:50%警告、70%告警;90%嚴重
穩定運行時:
1.vmstat統計1-id的計數;2.sar -u統計1-%idle的計數;3.dstat統計1-id1的計數;
4.mpstat -P ALL統計1-%idle的計數;5.ps統計cpu的計數
滿載負荷時:
1.vmstat,r計數大於1則表示負載;2.sar -q,runq-sz邏輯顆數;3.dstat -p,run的cpu邏輯顆。
異常和錯誤時:
安裝perf捕獲處理器錯誤信息,需要2.6.31以上版本號纔可支持。(查看版本號命令:cat /proc/version、或者uname -r),官方說明:http://www.brendangregg.com/perf.html
常用命令(安裝工具的時候注意linux聯網):安裝yum install perf*、perf --help、perf list
內存:50%注意、70%告警;80%嚴重
穩定運行時:
1.free,查看使用情況;2.vmstat,查看使用情況;3.sar -r;4.ps。
滿載:
1.vmstat,查看si/so比例輔助swapd和free。so數值越大,swapd佔比越高,內存肯定已經飽和。
2.sar-W,查看次缺頁數。sar命令次缺頁面多意味着已經在不停地和swap打交道,證明內存已飽和。
3.查看內核日誌有誤OOM內存溢出機制的kill進程。當內存不夠會出發內核的OOM機制。
4.dmesg | grep killed。
異常和錯誤:
1.查看內核有誤physical failures。2.通過工具valgrind等進行檢查。有計數則異常。
網絡:通過查看發現收發包的吞吐速率達到網卡的最大上限,網絡數據報文有因爲這類原因而引發的丟包、阻塞等現象都證明當前網絡可能存在瓶頸,在性能測試爲了減少網絡的影響,一般我們都是在局域網中進行測試執行。
穩定運行時:1.sar -r DEV的收發計數大於網卡上限,表示收發包的吞吐速率達到網卡上限;2.ifconfig RX/TX帶寬超過網卡上限,表示有延遲;3.cat /proc/net/dev的速率超過上限,表示有丟包;4.nicstat的util的基本滿負荷,表示有阻塞。
滿載時:1.ifconfig dropped有計數;2.netstat -s“segments retransmited”有計數;3.sar -n EDEV rxdrop txdrop有計數。表示統計的丟包有計數,證明已經滿了。
錯誤:1.ifconfig,errors錯誤有計數;2. netstat -i,"RX-ERR"/"TX-ERR"錯誤有計數;3.sar -n EDEV,rxerr/s""txer/s";4.ip -s link,”errors“錯誤有計數。
IO:40%注意;60%高警;80%阻塞。
正常運行:1.iostat -xz,%util參數;2.sar -d,%util參數;3.iotop的利用率很高;4.cat /proc/pid/sched |grep iowait;
滿載:1.iosstat -xnz 1,“avgqu-sz”>則表示有滿載嫌疑;2.iostat await>70,有滿載嫌疑;
錯誤:1.dmesg 查看io錯誤 ;2.smartctl /dev/sda查看錯誤信息。
【實際案例】
一、系統負載監控案例:CPU顆粒數爲恆定值,超過則阻塞。
命令:
1.uptime(運行時長、用戶數、服務器過去1分鐘、5分鐘、15分鐘隊列中的平均進程數負載數)
2.w(當前在線用戶的詳細信息),如果運行時長較短,可能是重啓過,需要檢查是否異常導致重啓
3.如果平均進程負載數0.8以下,表示正常。1-3表示負載。5-15表示有問題。15以上負載嚴重,需要分析進程調度策略,檢查是否已經引起阻塞。如有阻塞,需要用ps和top檢查實時狀態。
4.實時監控小技巧:uptime |awk '{print (NF-2)}',uptime |awk '{print (NF-1)}',uptime |awk '{print NF}'
字段解釋:
%sy內核空間佔用cpu百分比;
%ni用戶進程空間內改變過優先級的進程佔用CPU百分比;
%id空閒CPU百分比
%wa等待輸入輸出的CPU時間百分比;過高需要iostat和sar分析IO性能是否有瓶頸。
%hi硬中斷佔用CPU百分比;過高需要/proc/interrupts、/proc/irq/pid/smp_affinity、服務irqbalance是否配置成功、以及CPU的頻率,通過這些命令幫助系統打散優化系統的硬件中斷
%si軟中斷佔用CPU百分比;常見中斷由網絡引起,從網卡到IP層的數據報文收發延遲,以及長時間寫日誌導致軟件中斷。
二、系統監控分析案例:
常用命令:top、htop、dstat、nmon、glance等用戶資源分析命令。
重點命令:top最全、最完整、最頻繁的命令,類似windows的任務管理器。實時更新正在運行的進程和系統載荷情況,包括系統負載、cpu利用分佈情況、內存使用、每個進程的內存使用情況等信息。
TOP頁面分解:
1.任務隊列信息;2.進程狀態信息;3.CPU信息;4.內存信息;5.進程信息;
CPU監控:
1.當前cpu利用率=1-%id=%us+%sy(內核空間佔用cpu的百分比)+%si(軟中斷佔用cpu的百分比)(指網卡到ip層數據報文收發的延遲處理,或者長時間寫日誌也會造成軟件中斷)
2.cpu圖形展示組件:gnuplot
內存監控:
1.buffer/cache會佔用物理內存,當系統需要的時候,通過drop cache可以釋放內存。
2.舉例說明:本來free -m(物理內存剩餘150)、drop cache(執行內核同步和drop內核調用後)、sync(釋放cache/buffers內存後執行,防止數據丟失)、free -m(重新檢查物理內存剩餘值,會增加buffers和cached的內存值之和)
3.公式:
物理內存總數mem_total=men_used+mem_free。
實際使用的物理內存數-buffers(內核緩存的內存量)/cache(緩衝交換區總量)=used-buffers-cache
實際可用的物理內存數+buffers/cache=free+buffers+cache
交換分區對應的內存總數swap_total=swap_used(使用的交換區總量)+swap_free(空閒的交換區總量)
進程監控:
1.top展示的是進程信息,可用ps檢查實際線程級信息。
2.字段說明:
PID:進程號
user:進程所有者的用戶名;
PR:優先級;
NI:nice值,負值表示高優先級,正值表示低優先級;
VIRT:進程使用的虛擬內存總量,單位KB,VIRT=SWAP+RES
RES:進程使用的、未被換出的物理內存大小,單位KB,RES=CODE+DATA
SHR:共享內存大小,單位kb;
%CPU:上次更新到現在的CPU時間佔用百分比。
%MEM:進程使用的物理內存百分比;
TIME+:進程使用的CPU時間總計,單位1/100秒。
COMMAND:命令名/命令行。
【top技巧]
top+enter+H:進入top配置頁面
top+enter+d:進入間隔刷新配置,輸入間隔秒數,可開始刷新。
top+enter+f+A+d:刪除A-PID列,新增UID列;
top+enter+1:切換單顆CPU信息和平均CPU信息。
top -b:批處理模式;需要在文件中保存,並輸出時必帶參數,否則會打印亂碼)
top -c:命令/程序名 觸發
top -d:設置延遲間隔;系統默認爲3秒,舉例:top -d 5,改爲每五秒刷新一次結果
top -n:設置迭代數量;退出前監控的具體次數,舉例:top -n 3,監控3次數據後退出。
top -p:監控特定的PID
top -u或-U:用戶名或者UID
舉例:top -b -d 1 -n 3 >top.log,表示重定向日誌打印到文本中。(必須加-b,否則會顯示亂碼)