Linux 問題分析與性能優化

目錄

排查順序

整體情況:

  1. top/htop/atop命令查看進程 / 線程、CPU、內存使用情況,CPU 使用情況;

  2. dstat 2查看 CPU、磁盤 IO、網絡 IO、換頁、中斷、切換,系統 I/O 狀態;

  3. vmstat 2查看內存使用情況,內存狀態;

  4. iostat -d -x 2查看所有磁盤的 IO 情況,系統 I/O 狀態;

  5. iotop查看 IO 靠前的進程,系統的 I/O 狀態;

  6. perf top查看佔用 CPU 最多的函數,CPU 使用情況;

  7. perf record -ag -- sleep 15;perf report查看 CPU 事件佔比,調用棧,CPU 使用情況;

  8. sar -n DEV 2查看網卡的吞吐,網卡狀態;

  9. /usr/share/bcc/tools/filetop -C查看每個文件的讀寫情況,系統的 I/O 狀態;

  10. /usr/share/bcc/tools/opensnoop顯示正在被打開的文件,系統的 I/O 狀態;

  11. mpstat -P ALL 1 單核 CPU 是否被打爆;

  12. ps aux --sort=-%cpu 按 CPU 使用率排序,找出 CPU 消耗最多進程;

  13.  ps -eo pid,comm,rss | awk '{m=$3/1e6;s["*"]+=m;s[$2]+=m} END{for (n in s) printf"%10.3f GB  %s\n",s[n],n}' | sort -nr | head -20 統計前 20 內存佔用

  14. awk 'NF>3{s["*"]+=s[$1]=$3*$4/1e6} END{for (n in s) printf"%10.1f MB  %s\n",s[n],n}' /proc/slabinfo | sort -nr | head -20  統計內核前 20slab 的佔用;

進程分析,進程佔用的資源:

  1. pidstat 2 -p 進程號查看可疑進程 CPU 使用率變化情況;

  2. pidstat -w -p 進程號 2查看可疑進程的上下文切換情況;

  3. pidstat -d -p 進程號 2查看可疑進程的 IO 情況;

  4. lsof -p 進程號查看進程打開的文件;

  5. strace -f -T -tt -p 進程號顯示進程發起的系統調用;

協議棧分析,連接 / 協議棧狀態:

  1. ethtool -S 查看網卡硬件情況;

  2. cat /proc/net/softnet_stat/ifconfig eth1 查看網卡驅動情況;

  3. `netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n`查看連接狀態分佈;

  4. ss -ntp或者netstat -ntp查看連接隊列;

  5. `netstat -s` 查看協議棧情況;

方法論

RED 方法:監控服務的請求數(Rate)、錯誤數(Errors)、響應時間(Duration)。Weave Cloud 在監控微服務性能時提出的思路。

USE 方法:監控系統資源的使用率(Utilization)、飽和度(Saturation)、錯誤數(Errors)。

性能分析工具

Linux 內核的各個子系統出發,彙總了對各個子系統進行性能分析時,你可以選擇的工具。不過,雖然這個圖是性能分析最好的參考資料之一,它其實還不夠具體。比如,當你需要查看某個性能指標時,這張圖裏對應的子系統部分,可能有多個性能工具可供選擇。但實際上,並非所有這些工具都適用,具體要用哪個,還需要你去查找每個工具的手冊,對比分析做出選擇。

CPU 分析思路

首先,從 CPU 的角度來說,主要的性能指標就是 CPU 的使用率、上下文切換以及 CPU Cache 的命中率等。下面這張圖就列出了常見的 CPU 性能指標。

內存分析思路

接着我們來看內存方面。從內存的角度來說,主要的性能指標,就是系統內存的分配和使用、進程內存的分配和使用以及 SWAP 的用量。下面這張圖列出了常見的內存性能指標。

IO 分析思路

從文件系統和磁盤 I/O 的角度來說,主要性能指標,就是文件系統的使用、緩存和緩衝區的使用,以及磁盤 I/O 的使用率、吞吐量和延遲等。下面這張圖列出了常見的 I/O 性能指標。

網絡分析思路

從網絡的角度來說,主要性能指標就是吞吐量、響應時間、連接數、丟包數等。根據 TCP/IP 網絡協議棧的原理,我們可以把這些性能指標,進一步細化爲每層協議的具體指標。這裏我同樣用一張圖,分別從鏈路層、網絡層、傳輸層和應用層,列出了各層的主要指標。

基準測試工具

除了性能分析外,很多時候,我們還需要對系統性能進行基準測試。比如,

參考

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/d1NLXGp7teOgskussBXNMQ