我们最近用RHEL 6.1替换了RHEL 5.6 Web服务器.对于这两种环境,已使用(stock)Redhat发布的Apache httpd(即yum install httpd).服务器正在提供
PHP内容并且正忙(每分钟提供大约2500-4000页请求).两台服务器的规格在内存,存储和网络连接方面完全相同.我们看到的是RHEL 6.1盒子上的负载平均值明显更高 – 其中负载平均值(有时)峰值超过40(所有httpd进程)导致站点性能显着下降.我们已经监控RHEL 5.6环境,并且负载平均值不超过大约5个并发httpds.我们如何调查此问题?请记住,这是一个生产环境,但我们可以通过在5.6和6.1服务器之间切换来比较“苹果与苹果”.
解决方法
您每分钟2500 – 4000个请求转换为每秒40-60个请求.这种负载几乎不需要内核级别调整,但更可能是您的Apache或PHP设置有问题.一些典型的原因包括
> httpd.conf中的Long TimeOut值
>在httpd.conf中保持KeepAlive和/或长KeepAliveTimeOut值(可能导致额外的httpd进程)
>加载了一些不必要的httpd模块
>加载了一些不必要的PHP模块
>配置错误的memcached设置(如果使用)
>数据库连接/配置问题
您需要弄清楚与旧服务器相比有什么不同.您是否将配置值从旧服务器复制到新服务器?旧的服务器多年前是否经过精心调校,您忘记了一些重要的事情?
Apache的服务器状态页面向您展示了什么?
如果其他一切都失败了,你总是可以使用PHP的XDebug模块.这意味着您在服务器上执行页面加载,并让XDebug为您生成Valgrind兼容报告.然后,您可以使用KCacheGrind或其他分析器分析该文件,并查看宝贵的cpu时间消耗的位置.这可以让你知道什么是错的.