我们有一台 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
got
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
就我的情况而言,服务器之前曾有过恶意文件。也许缓存副本仍然存在。
清除网站和服务器缓存解决了该问题。