PHP设置[pm.max_children,pm.start_servers,pm.min_spare_servers和pm.max_spare_servers]

时间:2014-02-23 21:41:57

标签: php performance error-handling amazon-ec2

将网站从GoDaddy共享服务器转移到EC2实例。处理流量,在典型的一天的高峰时间是约300名活跃访客,至少可以说是有问题的。我的CPU使用率缓慢上升,最终达到100%,使网站基本上无法使用。我一直在尝试从错误日志中解决问题,并想知道是否有更重要的问题需要解决。

在查看Apache错误日志后,我增加了MaxClients [prefork(256)/ worker(300)/ serverlimit(256)] ==> (500/500/500)。

在查看PHP错误日志后,我增加了[pm.max_children(50)/ pm.start_servers(5)/ pm.min_spare_servers(5)/pm.max_spare_servers(35))==> (100,10,10,70)

即使有这些数字,我仍然有警告: [23-Feb-2014 04:34:47]警告:[池www]似乎很忙(你可能需要增加pm.start_servers,或pm.min / max_spare_servers),产生32个孩子,有7个闲置,总共83个儿童

人为地增加这些数字似乎不是长期解决方案。有什么想法吗?

EC2: EC2

RDS: RDS

1 个答案:

答案 0 :(得分:0)

  • 如果您的网站没有使用任何类型的缓存,请开始使用一个缓存。有很多选择。
  • 负载来自用户?尽可能减少机器人的负载。建立阻止IP或代理的规则。
  • 如果可以,请使用gzip。它会将一些额外的工作传递给CPU,但会缓解Apache。
  • 避免/预先进行热链接。请记住,不要压缩图像或多媒体文件,只能压缩文本。
  • 尝试设置KeepAlive关闭。这将使用户生成更多连接并增加HTTP流量和握手,但可以减轻打开的连接。如果您需要打开或关闭,您是唯一可以找到的人。
  • 减少keepalivetimeout。您可能更喜欢这样而不是关闭KeepAlive
  • 尝试尽可能多地禁用模块。根据您对服务器的控制,这可能无法实现。

除了诸如优化服务器端语言页面,优化数据库查询等常规内容之外,我们还可以了解更多详细信息。

根据您的图表进行更新

假设所有图表具有相同的比例。

当您的服务器达到100%CPU时,您有0次读取和0次写入,但您的网络使用率很高。流量来往哪里?您可以认为正在使用缓存,但我很惊讶只有缓存可以保存用户的整个访问权限。我的意思是,他们必须使用完全相同的文件/页面而不需要一次更改。问题在于,不是让所有用户都使用相同的资源是多么不可能,那就是你有一些数据库访问权限。

如果数据库位于同一台服务器上,则数据库的读/写速度非常低,甚至无法提高其他图形上的条形。如果数据库在另一台服务器中,那么一个人不会影响另一个服务器是正常的。

但是,即使几乎没有读/写工作,数据库仍在工作,并且负载正在增加,这表明查询存在问题。可能是复杂的视图,可能是非常低效的查询,可能会对某些查询进行过多的计算。队列深度似乎表明你有一个瓶颈。

我说你有一些事情让数据库工作变得非常困难,而这正是影响最大的事情。如果数据库位于同一服务器中。但这不是整个故事。先检查一下。