该网站一直运行良好,没有问题,但最近出现了故障。
经过一番调查,似乎 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
以进行修复。
抱歉,这些建议有些不切实际。