伺服器負載每天數次峰值,過去一個月的平均負載是全年平均負載的 5 倍
我為我們的(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 程序掛起。
這些都是要調查的事情;更多的數據,以及歷史保存的數據,可以幫助您解決這個問題。希望這可以幫助; 祝你好運!