平均负载过高导致服务器延迟

平均负载过高导致服务器延迟

我们有一台 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

答案1

就我的情况而言,服务器之前曾有过恶意文件。也许缓存副本仍然存在。

清除网站和服务器缓存解决了该问题。

相关内容