我遇到以下情况:
我们使用8核,8gb ram,2.6 GHz频率的linode-使用nginx + php-fpm-我们获得了非常高的cpu使用情况图(我们不想成为如此糟糕的VPS邻居)...
我们一次在网站上的用户数少于100,因此这种情况也令人难以置信,这是因为我们的CPU使用率很高。
我们使用的是一个非常未知的,可能是cpu密集的php方式的,可疑的,可怕的框架,而不是众所周知的,文档完善,精心设计的其他框架,如wordpress或drupal,其中有很多关于缓存的文档(以及插件)处理缓存)在nginx + php_fpm平台上的php。
因此,我们有大约6个开放的php-fpm进程,它们在运行时分别消耗大量(30+,通常接近99%)的cpu-我丝毫不知道如何阻止他们使用太多的cpu 。我不知道是哪个PHP脚本导致了这些峰值,因为它们一直在发生……通常只有1或2个正在运行-但是当所有6个脚本运行时,我们会最大化所有8个cpus。
我的pool.d / www.conf文件具有以下设置:
pm = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6
我们进行此^设置是因为,按照我的解释方式,我们的内存实际上是惊人的(htop显示使用了472/7000 + mb,没有交换等),并且我们可以处理更多的进程并中断等待获得的行已处理-但不幸的是,由于每个进程在运行时对我们的cpu来说过于繁琐-我们最终将CPU驱动通过屋顶-因此我们无法处理足够的进程。
问题 -我们到底该怎么做才能减少进程php-fpm cpu的使用,以便我们可以增加该pool conf文件中php-fpm的设置 -而且是的,/ var / log / php5- fpm.log大喊大叫我们要增加孩子并调整/增加最小/最大/启动服务器。但是,这样做会使我们的平均负载达到疯狂,如前所述。我们如何在不必使用缓存的情况下做到这一点或我们有哪些选择?
我的点子?我已经阅读了有关使用cpulimit的信息,以确保没有任何进程花费超过分配的cpu数量-但这会使速度变慢以致无法使用吗?或者这样做,我们可以提高运行多个流程的能力-我还认为可以运行两个池-一个池用于我们的前向网站(客户体验),另一个用于后端(这在一定时间影响我们的前向站点) -正在运行消耗性报告)。
我已经花了几天的时间在这个主题上进行研究,搜索等等,但是这很困难,因为每个人的情况对于他们的系统来说都是如此独特-问题在于这样一个特定的,闻所未闻的,可能写得不好的框架-很难找到解决方案。我们也不能只废弃此框架-我必须找到某种解决方案。
更新:我已经实现了memcache来存储php会话-因为该框架严重依赖于用户会话,并且我们系统的性质是员工经常一次使用多个选项卡-每个选项卡都返回到会话以确认功能/用户数据等...因此,我希望由此带来的效果有所提高-如果您愿意,欢迎对此发表评论-我将在明天达到更高的高峰时段时看看情况如何。