Uptime
高負載平均:哪些程序在隊列中等待?
我有一個執行 Redis 的 Ubuntu 伺服器,它存在高負載問題。
取證
正常執行時間
# uptime 05:43:53 up 19 min, 1 user, load average: 2.96, 2.07, 1.52
薩爾
# sar -q 05:24:00 AM LINUX RESTART 05:25:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 05:35:04 AM 0 116 3.41 2.27 1.20 4 Average: 0 116 3.41 2.27 1.20 4
htop
最佳
網路統計
34 個開放
redis-server
連接:$ sudo netstat -natp | grep redis-server | wc -l 34
自由
$ free -g total used free shared buffers cached Mem: 14 6 8 0 0 2 -/+ buffers/cache: 4 10 Swap: 0 0 0
如何知道是哪些程序導致負載高,等待進入
Running
狀態?連接數是否過多?
由於高 iowait,您會看到意外的 loadavg。頂部部分中的98.7
wa
表明了這一點。從您的螢幕截圖中,我看到 kworker 程序也處於不間斷睡眠狀態(頂部的 D 狀態),這在程序等待磁碟 I/O 完成時發生。
vmstat
讓您可以看到執行隊列。vmstat 1
以典型方式執行以sar
每秒更新一次。r 列顯示核心用來計算 loadavg 的可執行/正在執行的程序,b 列顯示等待磁碟 I/O (即不間斷睡眠)的程序。b 中的程序被添加到 loadavg 計算中,這就是 iowait 導致神秘 loadavg 的原因。
因此,要回答您關於如何查看哪些 proc 導致高 loadavg 的問題,在您的 iowait 情況下,使用
top
/ps
查找處於 D 狀態的 proc,然後從那裡進行故障排除。