当 Apache 和 MYSQL 同时运行时,Web 服务器的最大 CPU

当 Apache 和 MYSQL 同时运行时,Web 服务器的最大 CPU

该网站一直运行良好,没有问题,但最近出现了故障。

经过一番调查,似乎 MYSQL 和 Apache 的组合让这个系统不堪重负。Apache 可以运行并处理静态网页,而当网站无法正常工作时,MYSQL 可以正常运行。

一旦网站启用 SQL 运行,机器上的 CPU 就会保持在 100%。

使用图片:

在此处输入图片描述

我检查了 sql 数据库是否有错误,尝试调整 apache/sql conf 文件中的几乎所有参数以提高性能。该服务器是基于 redhat 的机器,运行最新的软件包。

欢迎任何帮助/建议。

对高 CPU Apache 进程执行 strace 时,我看到以下内容:

read(14, "", 8192)                      = 0
close(14)                               = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 14
fcntl64(14, F_SETFL, O_RDONLY)          = 0
fcntl64(14, F_GETFL)                    = 0x2 (flags O_RDWR)
connect(14, {sa_family=AF_FILE, path="/var/lib/mysql/mysql.sock"...}, 110) = 0
setsockopt(14, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
setsockopt(14, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
setsockopt(14, SOL_IP, IP_TOS, [8], 4)  = -1 EOPNOTSUPP (Operation not supported)
setsockopt(14, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0

以下是我从 mysql 进程中看到的内容:

futex(0x86fc9a4, FUTEX_WAIT_PRIVATE, 39, NULL) = 0
futex(0x86fc734, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0x86fc734, FUTEX_WAKE_PRIVATE, 1) = 0
gettimeofday({1301465020, 141613}, NULL) = 0
clock_gettime(CLOCK_REALTIME, {1301465020, 141699633}) = 0
futex(0x8707a64, FUTEX_WAIT_PRIVATE, 1, {4, 999913367}) = 0
futex(0x8707a40, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
futex(0x8707a40, FUTEX_WAKE_PRIVATE, 1) = 0
exit_group(0)                           = ?

答案1

我知道您说过您已经调整了 Apache,但这是一个流量较低的网站吗?您是否尝试过让 Apache 的子实例保持关闭状态:最大备用服务器数

您可以仔细ps -ef查看%CPU每个进程的列。如果是简单的您可以对旧硬件上的站点进行测试lighthttpd以进行修复。

抱歉,这些建议有些不切实际。

相关内容