Uptime

高負載平均:哪些程序在隊列中等待?

  • August 6, 2016

我有一個執行 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

CPU 利用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.7wa表明了這一點。從您的螢幕截圖中,我看到 kworker 程序也處於不間斷睡眠狀態(頂部的 D 狀態),這在程序等待磁碟 I/O 完成時發生。

vmstat讓您可以看到執行隊列。vmstat 1以典型方式執行以sar每秒更新一次。

在此處輸入圖像描述

r 列顯示核心用來計算 loadavg 的可執行/正在執行的程序,b 列顯示等待磁碟 I/O (即不間斷睡眠)的程序。b 中的程序被添加到 loadavg 計算中,這就是 iowait 導致神秘 loadavg 的原因。

因此,要回答您關於如何查看哪些 proc 導致高 loadavg 的問題,在您的 iowait 情況下,使用top/ps查找處於 D 狀態的 proc,然後從那裡進行故障排除。

引用自:https://unix.stackexchange.com/questions/301685