我的Apache状态看起来像;
201 requests/sec - 98.8 kB/second - 504 B/request 85 requests currently being processed, 345 idle workers _____CCW_C_____C__C__C_R____C_WC_________C__C____CW__C__CCC_____ __C____W______C___C___CW__C_C______C__W_C__C_____CCC____C______R CC_C_______C___C____C______________C______C__C________________C_ ___________________C______________________C_______C___C_____C___ CC____C__C___R_____C_C_CC__________C___C___________R____C_C_C___ ______C______W_W__W___C____________________C__WCC__R__R_C_______ R__RC________________________C___R____W__C____.................. ....................................................
服务器负载在4核心机器上平均为2。
IO利用率是10-15%,没有超过70%的跳跃。
机器几乎有4 GB的免费使用0掉期。
该机器上的网站是一个PHP网站。 所有PHP代码在被访问时都经过优化和快速处理,但是有时请求会被阻塞。 意义坚定; 至less10秒没有反应。 我们debugging了PHP代码,但它是相当优化和快速的。 我们花了很多时间,直到我们决定testing以下请求:
<html><body>test</body></html>
test.html页面。
这个静态资源也被“卡住”,就像php页面被“卡住”一样。
考虑到系统的健康状况以及它是一个静态文件,这怎么可能呢?
我testing了networking,但是,当PHP在站点监控中显示“缓慢”时,htmltesting文件也花费了(比10秒更长)来加载使用;
time lynx -dump http://127.0.0.1/test.html
我们有点急于解决这个问题,但似乎无法解决这个问题。
也许Apache用完文件句柄? 你有多less文件句柄允许它有? 默认的1024可能会很快成为一个瓶颈。 在Linux中,你在/etc/security/limits.conf文件中增加了限制。
在摊位里有很多磁盘活动吗? 如果你有Apache访问日志和其他日志非常详细地启用,也许是文件系统提交最新的变化? 这不应该以任何方式影响Apache,但你永远不知道。
只是为了确保,在摊位期间看看/proc/sys/kernel/random/entropy_avail 。 你可以用例如watch -n1 'cat /proc/sys/kernel/random/entropy_avail'看到它。 如果它表示0 ,你的内核已经用尽了熵,并且阻塞了Apache,直到有更多的熵可用。
如果是这种情况,您可以安装rng-tools并运行rngd守护进程,在真实熵不可用的情况下,将rngd半随机数字从/ dev / urandom铲到/ dev / random。
我没有深入到内部,但从我的经验和我所告诉的…如果PHP使用embedded式模块( libphp5.so )在Apache上运行,然后Apache加载PHP(和可选的任何共享模块)到每个请求的内存中,即使PHP代码没有运行。
考虑在Apache之前使用nginx作为反向代理。 nginx在提供静态资源方面速度非常快,如果configuration正确,可以真正减less繁忙的Web服务器的负载。 要获得奖励积分,请将PHPconfiguration为通过nginx中的FastCGI运行。 看看这篇文章 ,找出一些原因。 这是一个非常好的方式。 我在上周设置了一个Ubuntu 10.04,nginx,spawn-fcgi和php-cgi的新Web服务器,几乎没有任何时间。 为了logging,PHP 5.3与Ubuntu 10.04捆绑在一起。