非常高的平均負載導致伺服器延遲
我們有一個 CentOS 6.9 伺服器,有 4 核 CPU 和 32GB RAM。
每天大約在同一時間,平均負載逐漸變化,
0.0
直到11
我們最終不得不重新啟動伺服器。
CPU
: 有時會出現峰值,當諸如 spamd、fail2ban 之類的程序需要幾秒鐘來做某事時。否則約為1%。有一段時間,php 也佔用了 >50% 的 CPU。大部分時間它至少有 70% 處於空閒狀態。
I/O
: 沒有太多的 I/O 動作,但有時 mysqld 會佔用 99.5% 的 I/O
RAM
: 總是在可接受的範圍內。
Bandwidth
: 期間變化不大。可接受的範圍。
Disk Space
: 超過 1TB 的可用空間。
AV
: 跑clamd等工具,在wordpress安裝中找到了一些。現在被刪除了。即使事情很低,平均負載也在不斷增加,伺服器變得太慢而無法做任何事情,我們被迫重新啟動。然後事情就正常了。
這不是 cronjob 問題,因為我也認為因為正常程序,它必須是 cron。所以我
service crond stop
在延遲開始前使用並停止了幾個小時。滯後仍然發生。在高負載平均時間內有許多程序在執行。有些是:多個
mysqld
,../bin/suexec 501 501 php5
,/bin/php
,/fail2ban
程序我還從伺服器收到許多電子郵件,說明
System Load Alert 1 for mysite.com
由於它經常同時發生,硬體問題似乎不是原因。
我的問題是,我還能檢查什麼來解決這個問題?我把我所有的籌碼都押在了 cronjob 上。
更新 1:交換空間:檢查使用
sar -W -f /var/log/sa/sa15
所有值都是 0 使用free -h
gottotal used free shared buffers cached Mem: 16G 2.9G 13G 18M 0B 1.4G -/+ buffers/cache: 1.4G 14G Swap: 0B 0B 0B
所以看起來沒有任何交換空間,但是有了這麼多的空閒 RAM,我懷疑我們真的需要它。
更新 2:檢查
iotop
寫入/讀取速度,幾秒鐘後達到 250 KB/s。緩慢期間 I/O 操作的結果,使用
iotop -aoP
:Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s PID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1508 be/4 root 7.88 M 24.00 K 0.00 % 1.32 % perl -T -w /usr/local/cpanel/3rdparty/bin/spamd --max-spare=1 --~llowed-ips=127.0.0.1,::1 --pidfile=/var/run/spamd.pid --listen=5 9288 be/4 root 248.00 K 16.00 K 0.00 % 2.42 % tailwatchd - chkservd - spamd check 1714 be/4 root 0.00 B 4.00 K 0.00 % 0.24 % queueprocd - wait to process a task 5610 be/4 root 8.00 K 152.00 K 0.00 % 0.03 % tailwatchd 1446 be/4 mysql 8.79 M 256.00 K 0.00 % 0.02 % mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr~0 --pid-file=/var/lib/mysql/..
結果
find /proc/*/task/. -name stat -exec grep ' D ' {} \;
千差萬別,有時什麼都沒有,有時過程不同。我將發佈在平均負載非常高時發生的情況,大約 18:1585 (fail2ban-server) D 1 1575 1575 0 -1 16943 (cpsrvd (SSL) - ) D 1 16943 16942 0 -1 17221 (tailwatchd) D 1 17220 17220 0 -1 17255 (nginx) D 17253 17253 17253 0 -1 18102 (mysqld) D 17491 17479 12176 3482 0 -1 18355 (mysqld) D 17491 17479 12176 3482 0 -1 18099 (httpd) D 18087 18087 18087 0 -1 18127 (httpd) D 18087 18087 18087 0 -1 18312 (exim) D 1 17295 17295 0 -1 18375 (php) D 18096 18087 18087 0 -1 18379 (exim) D 18368 18368 18368 0 -1 18408 (find) D 18144 18107 18107 0 -1 18410 (suexec) D 18095 18087 18087 0 -1
在我的情況下,因為伺服器之前有惡意文件。也許記憶體副本仍然存在。
清除網站和伺服器記憶體解決了這個問題。