php-fpm 使用大量 cpu

And*_*aev 5 php nginx central-processing-unit php-fpm

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

我已将 mysql 数据库移至另一台服务器并设置远程访问。同时大约有 300 个在线访问者,php-fpm 使用的 CPU 确实很多:

在此输入图像描述

我还对 WordPress 使用 APC-cache 和 batcache。

php-fpm 配置:

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
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

小智 4

如果您只有两个 CPU 并且有 30 个并行子进程,则正在执行您的 CPU 支持的进程数。当有多个孩子尝试工作时,每个孩子的 CPU 都会减少,结果是一切都会变慢,再加上 CPU 的开销。这对于像 WordPress 这样每个请求都使用大量 CPU 的情况非常重要。

最好将最大数量减少到 2 或 3 个子级,并且 nginx 负责管理连接队列,查询不会丢失。

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

pm.max_children = 2 
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助。