用於資源分析的USE方法
對於每種資源,檢查:
1、 Utilization 使用率
2、 Saturation 飽和度
3、 Errors 錯誤
Linux 60秒分析
這個內容來自性能分析大神和Netflix性能工程團隊
1、 uptime
2、 dmesg | tail
3、 vmstat 1
4、 mpstat -P ALL 1
5、 pidstat 1
6、 iostat -xz 1
7、 free -m
8、 sar -n DEV 1
9、 sar -n TCP,ETCP 1
10、 top
uptime
這是查看平均負載的快速方法,該平均負載指示要運行的任務(進程)的數量。在Linux系統上,這些數字包括要在CPU上運行的進程以及在不可中斷I / O(通常是磁盤I / O)中阻塞的進程。這給出了資源負載(或需求)的高級概念,然後可以使用其他工具進一步探索。
首次響應問題時,可以檢查平均負載,以查看問題是否仍然存在。在容錯環境中,遇到性能問題的服務器可能會在您登錄查看時自動從服務中刪除。15分鐘的平均負載過高,而1分鐘的平均負載過低,則表明您登錄得太遲而無法發現問題。
dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB,
file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check
SNMP counters.
這將顯示過去的10條系統消息(如果有的話),查找可能導致性能問題的錯誤。
上面的示例包括OOM killer和TCP SYN flooding造成的連接丟棄情況。TCP消息甚至指向您進行下一個分析區域:SNMP計數器。
vmstat 1
這是起源於BSD的虛擬內存統計工具,它還顯示其他系統指標。
請注意,第一行數字是自啓動以來的摘要(內存計數器除外)。
mpstat -P ALL 1
$ mpstat -P ALL 1
[...]
03:16:41 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
03:16:42 AM all 14.27 0.00 0.75 0.44 0.00 0.00 0.06 0.00 0.00 84.48
03:16:42 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:16:42 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:16:42 AM 2 8.08 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 91.92
03:16:42 AM 3 10.00 0.00 1.00 0.00 0.00 0.00 1.00 0.00 0.00 88.00
03:16:42 AM 4 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.99
03:16:42 AM 5 5.10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 94.90
03:16:42 AM 6 11.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 89.00
03:16:42 AM 7 10.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 90.00
[...]
此命令顯示按CPU時間劃分成狀態的時間。
輸出顯示了一個問題:CPU 0達到了100%的用戶時間,這是單線程瓶頸的證據。
還需要注意到是否有iowait很高的情況出現。以及可以通過syscall和kernel tracing以及CPU分析來探索的%sys時間。
pidstat 1
pidstat(1)顯示每個進程的CPU使用率。top(1)是用於此目的的流行工具;但是,pidstat(1)默認提供滾動輸出,以便可以看到隨時間的變化。
$ pidstat 1
Linux 4.13.0-19-generic (...) 08/04/2018 _x86_64_ (16 CPU)
03:20:47 AM UID PID %usr %system %guest %CPU CPU Command
03:20:48 AM 0 1307 0.00 0.98 0.00 0.98 8 irqbalance
03:20:48 AM 33 12178 4.90 0.00 0.00 4.90 4 java
03:20:48 AM 33 12569 476.47 24.51 0.00 500.98 0 java
03:20:48 AM 0 130249 0.98 0.98 0.00 1.96 1 pidstat
03:20:48 AM UID PID %usr %system %guest %CPU CPU Command
03:20:49 AM 33 12178 4.00 0.00 0.00 4.00 4 java
03:20:49 AM 33 12569 331.00 21.00 0.00 352.00 0 java
03:20:49 AM 0 129906 1.00 0.00 0.00 1.00 8 sshd
03:20:49 AM 0 130249 1.00 1.00 0.00 2.00 1 pidstat
03:20:49 AM UID PID %usr %system %guest %CPU CPU Command
03:20:50 AM 33 12178 4.00 0.00 0.00 4.00 4 java
03:20:50 AM 113 12356 1.00 0.00 0.00 1.00 11 snmp-pass
03:20:50 AM 33 12569 210.00 13.00 0.00 223.00 0 java
03:20:50 AM 0 130249 1.00 0.00 0.00 1.00 1 pidstat
[...]
此輸出表明Java進程每秒消耗的CPU數量是變化的。注意這些百分比是所有CPU的總和,所以500%等於五個CPU的100%。
iostat -xz 1
此工具顯示存儲設備I / O指標。每個磁盤設備的輸出列都在此處用換行符表示,因此很難讀取。
free -m
推薦使用 -w 參數, 顯示的更詳細
sar -n DEV 1
sar工具具有用於不同度量標準組的多種模式。
在這裏,我使用它來查看網絡設備指標。檢查接口吞吐量rxkB/s和txkB/s,以查看是否已達到任何限制。
圖上可以看到 enp2s0f0的received接收到的流量在 985和 2817kb/s , sended 發出的流量在 847.7和965.78kb/s的樣子。
sar -n TCP,ETCP 1
現在,我們使用sar(1)查看TCP指標和TCP錯誤。要檢查的列:
active/s: 每秒本地啓動的TCP連接數(例如,通過connect()) ,主動對外發起連接(可以理解爲client模式)
passive/s: 每秒遠程啓動的TCP連接數(例如,通過accept()) ,被動接收外部連接請求(可以理解爲server模式)
retrans/s: 每秒TCP重傳的次數
主動和被動連接計數對於表徵工作負載很有用。重新傳輸是網絡或遠程主機問題的跡象。
top
top命令,可以具備uptime的功能。此外還能按照cpu或者內存使用率排序、搜索指定進程。 總體而言,top命令具備很強大的process、cpu、mem瓶頸分析功能。這裏不過多介紹。