Apache-2.2

伺服器負載每天數次峰值,過去一個月的平均負載是全年平均負載的 5 倍

  • December 21, 2011

我為我們的(Debian)LAMP 集群設置的 Munin 通知一直在通知我,我們的生產機器上的負載處於危險水平。雖然全年的平均負載通常在 2 到 8 之間,但在過去一個月(僅在過去一個月)中,負載一直飆升至 10、18,有時甚至是 50-60。尖峰一次只持續 5-10 分鐘,大約每 2-3 小時發生一次。峰值不會影響性能,只是因為我有一個腳本,當負載超過 10 時,它會將流量從我們的伺服器發送到鏡像 CDN。我已經尋找與此時間範圍相關的 cron 作業,但我看不到任何東西導致這個。網站流量也很正常(我們每天收到大約 20 萬次訪問)。此 Web 伺服器所依賴的 MySQL 數據庫似乎執行正常。

我也在努力思考在這個問題開始時我所做的任何改變,但我真的什麼都想不起來。

這可能沒什麼好說的了。也許在我沒有看到的頂部列印輸出(下)中有一條線索。

我該如何繼續尋找原因?

– 負載沒有尖峰時的典型頂部:

top - 11:13:09 up 472 days, 25 min,  1 user,  load average: 6.08, 4.29, 3.80
Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
Cpu(s): 41.2%us,  5.8%sy,  0.0%ni, 49.5%id,  2.7%wa,  0.1%hi,  0.7%si,  0.0%st
Mem:   3369592k total,  2166980k used,  1202612k free,   559504k buffers
Swap:  2650684k total,     1892k used,  2648792k free,  1129116k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
32046 apache    15   0 36300  12m 9828 S   20  0.4   0:01.97 apache2
32679 apache    15   0 36568  13m  10m S   19  0.4   0:01.69 apache2
31441 apache    15   0 36616  13m  10m S   19  0.4   0:04.13 apache2
31477 apache    15   0 36596  13m 9.8m S   15  0.4   0:01.99 apache2
31993 apache    15   0 36876  16m  12m S   12  0.5   0:02.01 apache2
31782 apache    15   0 36836  14m  10m S    8  0.4   0:02.17 apache2
32198 apache    15   0 36536  13m  10m S    7  0.4   0:01.59 apache2
 880 apache    15   0 36508 9708 6236 S    7  0.3   0:00.42 apache2
31945 apache    17   0 36876  16m  13m S    5  0.5   0:03.17 apache2
32197 apache    16   0 36636  10m 7504 S    5  0.3   0:02.70 apache2
32326 apache    15   0 37024  11m 7632 S    5  0.3   0:02.15 apache2
32565 apache    15   0 37280  13m 9.8m S    5  0.4   0:03.75 apache2
32676 apache    15   0 36896  16m  12m S    4  0.5   0:00.95 apache2
32678 apache    15   0 36536  12m 9692 S    4  0.4   0:02.27 apache2
 974 apache    16   0 37064 9888 6016 D    4  0.3   0:00.13 apache2
32150 apache    16   0 36832  13m  10m S    3  0.4   0:01.74 apache2
31780 apache    16   0 36848  11m 7660 S    3  0.3   0:02.87 apache2

當我們扣球時,這是一個頂部:

top - 15:25:22 up 474 days,  4:37,  1 user,  load average: 78.73, 50.20, 24.79
Tasks: 250 total,   4 running, 244 sleeping,   0 stopped,   2 zombie
Cpu(s): 36.5%us,  4.7%sy,  0.0%ni, 56.4%id,  2.0%wa,  0.1%hi,  0.3%si,  0.0%st
Mem:   3369592k total,  2099904k used,  1269688k free,   553840k buffers
Swap:  2650684k total,     5104k used,  2645580k free,   729252k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27716 apache    15   0 43612  20m 9.8m S   20  0.6   0:01.95 apache2
16782 apache    16   0 39460  19m  13m R   19  0.6   0:04.61 apache2
19701 apache    15   0 39232  16m  10m S   17  0.5   0:03.18 apache2
19677 apache    16   0 39208  15m 9956 R   12  0.5   0:05.03 apache2
16760 apache    15   0 36620  16m  13m S    8  0.5   0:06.35 apache2
19798 apache    15   0 36564  13m 9988 S    6  0.4   0:02.76 apache2
20325 apache    15   0 36616  13m 9704 S    6  0.4   0:02.11 apache2
19699 apache    15   0 36860  15m  12m S    5  0.5   0:03.10 apache2
15109 apache    15   0 36624  16m  13m S    4  0.5   0:05.97 apache2
15101 apache    15   0 36592  13m  10m S    3  0.4   0:08.96 apache2
15112 apache    15   0 36612  16m  13m S    3  0.5   0:07.57 apache2
20204 apache    15   0 44612  21m 9.9m S    3  0.6   0:03.55 apache2
19624 apache    15   0 36588  13m  10m S    3  0.4   0:02.00 apache2
20151 apache    15   0 36616  16m  13m S    3  0.5   0:02.14 apache2
26252 apache    15   0 37072  13m   9m S    3  0.4   0:01.09 apache2
19805 apache    15   0 36472  16m  12m S    2  0.5   0:03.68 apache2
20163 apache    15   0 36640  13m  10m S    2  0.4   0:02.50 apache2
27260 apache    18   0 44292  20m 9328 S    2  0.6   0:02.08 apache2
29149 apache    15   0 36172  11m 8744 S    2  0.4   0:00.69 apache2
20315 apache    15   0 36360  15m  12m S    2  0.5   0:02.06 apache2
29148 apache    16   0 36184 8872 5644 S    2  0.3   0:00.08 apache2

根據新上任的系統管理員的說法,負載變得如此之高是因為我們最近一直在不斷地達到頻寬分配的容量(不確定是入站還是出站)。這個問題的一些受訪者是正確的,因為這根本不是伺服器出現問題的跡象。這是一個網路問題,新請求必須等待頻寬清理乾淨才能繼續進行 - 因此,高負載(延遲)。無論如何,我們最近搬到了一個頻寬分配更大的新數據中心。謝謝大家!

Loadavg 並沒有告訴你太多,真的,關於你的系統是否表現不佳。這是一個非常通用的指標,描述了您的系統有多忙,其中繁忙定義為目前正在執行或等待執行 cpu 指令的程序數的索引。在八核系統上,工作負載由大量短期程序(例如,Web 伺服器)描述,超過 50 的 loadavg 甚至可能不會引起我的注意。

您能否將這些峰值與您的 apache 日誌相關聯,以查看響應時間在峰值期間是否受到影響?您只是在高峰期間服務更多請求嗎?您是否保留有關 iowait 和使用者與系統 cpu 之類的統計資訊,它們是否相關?另一個提到交換的發帖人是正確的:交換會導致程序堆積,因為記憶體訪問會減慢到磁碟速度,這會導致更高的 loadavg 程序掛起。

這些都是要調查的事情;更多的數據,以及歷史保存的數據,可以幫助您解決這個問題。希望這可以幫助; 祝你好運!

引用自:https://serverfault.com/questions/282798