我有两台服务器 - 一台运行 PHP Web 服务,另一台是数据库服务器。我的负载很高(~9.0),我相信这是某种配置问题。PHP 处理很少,所有繁重的工作都由数据库服务器完成。我每秒大约有 6-8 个请求。
系统是 CentOS/Plesk(不是我的选择)。
top
看起来像这样:
top - 19:54:38 up 4:38, 2 users, load average: 9.42, 9.10, 8.86
Tasks: 48 total, 12 running, 36 sleeping, 0 stopped, 0 zombie
Cpu(s): 67.4%us, 32.5%sy, 0.0%ni, 0.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2097152k total, 231120k used, 1866032k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11806 apache 16 0 50416 28m 4744 R 24.6 1.4 7:27.61 httpd
11770 apache 16 0 49140 27m 4764 R 23.6 1.4 7:32.80 httpd
11783 apache 16 0 50424 28m 4736 R 23.2 1.4 7:19.99 httpd
30217 apache 16 0 50412 28m 4732 R 21.6 1.4 3:33.00 httpd
26245 apache 16 0 50412 28m 4732 R 21.2 1.4 4:14.98 httpd
26256 apache 16 0 48880 27m 4732 R 21.2 1.3 4:15.62 httpd
13659 apache 15 0 52464 30m 4764 R 19.2 1.5 5:23.12 httpd
26255 apache 16 0 48880 27m 4748 R 17.3 1.3 4:16.62 httpd
30215 apache 16 0 48796 27m 4732 R 16.3 1.3 3:45.32 httpd
29703 apache 16 0 52208 30m 4764 R 12.3 1.5 3:46.21 httpd
数据库服务器上的负载几乎为零-0.05-0.07。
我不是服务器专家,所以我已经处理这个问题一段时间了。我以为我之前通过yum update
在服务器上运行修复了这个问题 - 许多软件包都更新了,所以我推测这是 httpd 或类似程序中的一个修复错误。问题又出现了,我yum update
再次运行,问题又消失了。现在问题又出现了,更新也无法修复它 - 我觉得这整件事相当奇怪。
netstat
有许多 (~100) 个相同的条目,如下所示(由于保密协议的原因,IP 和主机名被隐藏):
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:12345 mydbserver.com:mysql TIME_WAIT
此外,它还有另外一百个左右的传入连接条目。
我将非常感激任何诊断此问题的想法或方法 - 我主要不是服务器人员(我是一名程序员),并且已经深陷其中。我相当肯定 PHP webservice 不是罪魁祸首 - 事实上这个问题在某一时刻得到了解决,这让我觉得它没问题,这是一个系统配置问题。
答案1
- 检查 DNS(# ping mydbserver.com)
- 检查 MySQL PROCESSLIST(mysql> SHOW FULL PROCESSLIST)
- 使用 strace(# strace -fp $APACHE_PID),进行分析(# strace -cfp $APACHE_PID)
- 如果使用PHP-FPM,请使用slowlog
- 检查 iptables 规则和与 MySQL 服务器的网络连接
- 使用 microtime() 记录您的 PHP 脚本或使用 Pinba。使用配置文件工具