Nginx

非常高的平均負載導致伺服器延遲

  • August 1, 2017

我們有一個 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 -hgot

            total       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

在我的情況下,因為伺服器之前有惡意文件。也許記憶體副本仍然存在。

清除網站和伺服器記憶體解決了這個問題。

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