Linux 服务器 apache httpd 进程使 i/o 等待接近 100% 并锁定服务器

0 linux svn centos6 apache-2.2

大约 5 天以来,似乎突然之间,我的 linux 服务器不时开始锁定。

就我从 top 和 iotop 命令开始发生的时间来看,模式总是相同的:

一个或多个 httpd 进程(通常是一个)挂起并开始使用 100% 的 CPU 功率,%wa 接近 100%,在 iotop 中,我看到几个 httpd 进程在 IO 列中使用了 99.99%。

我还在这台机器上通过 apache 运行了一个 SVN 服务器,我一直能够重现这一点的一种方法是对新文件进行 SVN 提交或从该服务器上的存储库进行 SVN 更新(我是只有一个使用此 SVN 存储库)。这将始终成功地重现此场景,但直到最近,我在签入/签出 SVN 时都没有遇到任何问题。

但有时它似乎完全没有可察觉的原因。

因此,我的 Apache 似乎存在一些问题,导致进程在某些触发器上消耗了大量读/写。

我想知道是否有人可以帮助我发现这个问题。

编辑:好的,现在又发生了:

这是顶部:

[root@server ~]# top
top - 10:56:54 up  2:59,  5 users,  load average: 171.46, 70.35, 27.01
Tasks: 328 total,   2 running, 326 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.9%us,  2.0%sy,  0.0%ni,  0.0%id, 96.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2021144k total,  1968192k used,    52952k free,     2500k buffers
Swap:  4194288k total,  2938584k used,  1255704k free,    39008k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10390 apache    20   0 2774m 936m 6200 D  2.0 47.4   1:52.27 httpd
 2149 root      20   0  927m  13m 1040 S  0.7  0.7   1:50.46 namecoind
   11 root      20   0     0    0    0 R  0.3  0.0   0:30.10 events/0
   23 root      20   0     0    0    0 S  0.3  0.0   0:17.88 kblockd/1
 2049 root      20   0  382m 4932 2880 D  0.3  0.2   0:03.67 httpd
 2144 root      20   0 1702m  69m 1164 S  0.3  3.5   5:19.68 bitcoind
 6325 root      20   0 15164 1100  656 R  0.3  0.1   0:11.09 top
10311 apache    20   0  387m 9496 7320 D  0.3  0.5   0:01.89 httpd
10313 apache    20   0  391m  10m 7364 D  0.3  0.5   0:02.40 httpd
10466 apache    20   0  399m  12m 7392 D  0.3  0.7   0:02.41 httpd
10599 apache    20   0  391m 9324 7340 D  0.3  0.5   0:00.15 httpd
10628 apache    20   0  384m 7620 4052 D  0.3  0.4   0:00.01 httpd
10633 apache    20   0  384m 7048 3504 D  0.3  0.3   0:00.01 httpd
10634 apache    20   0  384m 8012 4048 D  0.3  0.4   0:00.02 httpd
10638 apache    20   0  400m  22m 9.8m D  0.3  1.1   0:01.93 httpd
10640 apache    20   0  385m 8288 4028 D  0.3  0.4   0:00.03 httpd
10641 apache    20   0  401m  21m 6376 D  0.3  1.1   0:01.45 httpd
10759 apache    20   0  385m 8816 3480 D  0.3  0.4   0:01.45 httpd
10773 apache    20   0  384m 8044 3464 D  0.3  0.4   0:00.02 httpd
Run Code Online (Sandbox Code Playgroud)

这是 iotop 快照:

Total DISK READ: 5.93 M/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
10732 be/4 apache      3.76 K/s    0.00 B/s  0.00 % 58.48 % httpd
  876 be/3 root        0.00 B/s   52.68 K/s  0.00 % 52.98 % [jbd2/dm-1-8]
10906 be/4 root      124.17 K/s    0.00 B/s  0.00 % 23.03 % sh -c [ -x /usr/local/psa/admin/sbin/backupmng ] && /usr/local/psa/admin/sbin/backupmng >/dev/null 2>&1
 2156 be/4 root      206.94 K/s    0.00 B/s  0.00 % 21.15 % bitcoind
10904 be/4 mysql       0.00 B/s    0.00 B/s  0.00 % 18.94 % mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
10773 be/4 apache      7.53 K/s    0.00 B/s  0.00 % 14.77 % httpd
10641 be/4 apache     15.05 K/s    0.00 B/s  0.00 % 11.57 % httpd
10399 be/4 apache   1057.29 K/s    0.00 B/s 43.16 % 10.56 % httpd
10682 be/4 sw-cp-se  158.03 K/s    0.00 B/s  0.00 %  7.45 % sw-engine-cgi -c /usr/local/psa/admin/conf/php.ini -d auto_prepend_file=auth.php3 -u psaadm
10774 be/4 apache      3.76 K/s    0.00 B/s  0.00 %  6.53 % httpd
10624 be/4 apache      0.00 B/s    0.00 B/s  0.00 %  5.53 % httpd
10356 be/4 apache    899.26 K/s    0.00 B/s 35.52 %  4.01 % httpd
10795 be/4 apache      0.00 B/s    0.00 B/s  0.00 %  3.93 % httpd
10804 be/4 apache      7.53 K/s    0.00 B/s  0.00 %  3.08 % httpd
 4379 be/4 root        2.89 M/s    0.00 B/s 99.99 %  0.00 % namecoind
10619 be/4 apache    462.80 K/s    0.00 B/s  7.80 %  0.00 % httpd
10636 be/4 apache      3.76 K/s    0.00 B/s  0.00 %  0.00 % httpd
10716 be/4 mysql     105.35 K/s    0.00 B/s  5.92 %  0.00 % mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
 1988 be/4 root       18.81 K/s    0.00 B/s  0.00 %  0.00 % spamd_full.sock
Run Code Online (Sandbox Code Playgroud)

我还为 pid 10390 运行了 lsof -p ,它在 top 命令下位于顶部,这是我可以看到这是什么请求的底线,它说 CLOSE_WAIT:

httpd   10390 apache   34u  IPv6 315879       0t0     TCP default-domain.com:https->crawl-66-249-65-91.googlebot.com:42907 (CLOSE_WAIT)
Run Code Online (Sandbox Code Playgroud)

我仍然不确定究竟是什么导致这一切发生?

我终止了该服务,但 %wa 和负载平均值仍然很高,我还停止了 mysqld 和其他服务。它真的只有在我完全停止 httpd 后才会下降,即使那样我也无法启动它,而不会通过“netstat -tulpn”找到剩余的挂起 httpd 进程,杀死这些进程或执行“killall -9 httpd”并等待一段时间后循环遍历所有这些然后执行 /etc/init.d/httpd start

Mic*_*ton 6

首先,您的内存不足。

您的 VPS 有 2GB 的 RAM 和 4GB 的交换空间。2GB 的 RAM 已全部用完,交换区可能已满 3/4。在这一点上,在我管理的任何系统上,每五分钟都会出现一次警报,直到有人确认问题为止,这就是严重的问题。

所以你需要弄清楚是什么在使用所有内存。不幸的是,这可能很困难。

我可以看到单独一个 Apache 进程正在使用近 1GB 的内存。这显然是一个异常值,因为大多数其他人每个使用不到 22MB。

这之所以困难,是因为 Apache 允许您将 Perl 或 PHP 等语言直接嵌入到进程中,而且几乎可以肯定,这种脚本已经跑掉并耗尽了您的所有 RAM。

在这一点上,您的系统所能做的就是反复进出交换(这正是iotop它所做的),直到有人对一个放置良好的kill -9.

因此,您的下一步是尝试找出哪个脚本出了问题并占用了您所有的 RAM。