php-fpm使用了很多cpu

我在Ubuntu 12.04上使用wordpress,在我的VPS上使用Nginx + php-fpm。 有2个CPU核心+ 4096Mb内存。

我已经将MySQL数据库移动到另一台服务器,并设置远程访问。 一次有大约300个在线访问者,而且php-fpm使用了很多CPU:

在这里输入图像说明

我也使用APCcaching和batcache的WordPress的。

php-fpmconfiguration:

listen = /var/run/fpm-macradar.sock ;listen.backlog = -1 pm = ondemand pm.max_children = 30 pm.start_servers = 15 pm.min_spare_servers = 10 pm.max_spare_servers = 20 ;pm.process_idle_timeout = 10s; pm.max_requests = 500 pm.status_path = /status chdir = / request_slowlog_timeout = 60s slowlog = /var/log/$pool.log.slow request_terminate_timeout = 120s rlimit_files = 131072 rlimit_core = unlimited catch_workers_output = yes ;php_flag[display_errors] = off php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 128M 

任何帮助将不胜感激

如果你只有两个CPU并且有30个subprocess并行,正在进行你的CPU支持的进程数。 当有几个孩子在努力工作时,每个人都有较less的CPU,结果是一切都变慢了,再加上CPU的开销。 这对于像每个请求使用大量CPU的WordPress都是非常重要的。

最好把最多减less到2或3个孩子的数量,而负责pipe理连接队列的nginx,查询不会丢失。

当FPM是“ondemand”时,您只需要定义pm.max_children,在这种情况下:

 pm.max_children = 2 

希望对你有帮助。

这是一个古老的问题,但今天有人编辑这个post。

虽然安装一个WordPress的caching插件可以是有效的,它仍然意味着PHP执行,这是相对缓慢的。 如果您的某些网站访问者是匿名的(即未login),则可以在Nginx中进行页面caching(fastcgi_cache),避免调用PHP,从而显着降低CPU使用率并缩短响应时间。 这个页面可以caching1秒钟以内,或者如果这个站点是相当静态的,那么你可以把这个页面放到一天或更长时间。 棘手的部分是发布更改时清除caching,但我有一个解决scheme – 见下文。

阅读我在LEMP上编写的教程 。 这第一部分给你configuration文件下载,他们很好的评论和教程的后面部分解释他们。 Nginx也有一篇关于微caching的伟大文章。