Несколько дней назад заметил, что сайт стал очень сильно тормозить, загрузка одной страницы до 10 секунд, хотя раньше было не более двух, сайт Wordpress, работает на VPS CentOS 7 (2 Гб ОЗУ, 4 CPU x 2,2 Ghz) с Nginx + PHP-FPM. Поиск медленных скриптов через slow.log ничего не дал, часто попадает в лог файл index.php (выполняется более 5 секунд). Увеличение мощности сервера на одно ядро тоже. Кэширование включено через плагин W3 Total Cache, страницы кэшируются на диск, а база данных и объекты wordpress в memcached. Посещаемость до 15к уникальных пользователей в сутки. Пытался отсеять ботов с помощью модуля nginx testcookie, отсеиваются только боты поисковых систем, но да, тогда нагрузка падает, правда это не вариант. Да и директива Crawl-daily в robots.txt есть. Если W3TC отключить, PHP вообще падает по 502, а страницы начинают загружаться не быстрее, чем за 40-50 секунд. Что со всем этим можно сделать? Ниже конфигурационные файлы и статистика:
PHP-FPM status:
pool: losst
process manager: dynamic
start time: 10/Jul/2017:13:43:34 +0300
start since: 4363
accepted conn: 1169
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 0
active processes: 10
total processes: 10
max active processes: 10
max children reached: 0
slow requests: 18
************************
pid: 1459
state: Running
start time: 10/Jul/2017:13:43:34 +0300
start since: 4363
requests: 2010
request duration: 470466
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
************************
pid: 1493
state: Running
start time: 10/Jul/2017:13:44:19 +0300
start since: 4318
requests: 1936
request duration: 597569
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
************************
pid: 1462
state: Running
start time: 10/Jul/2017:13:43:36 +0300
start since: 4361
requests: 2008
request duration: 340305
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
************************
pid: 1464
state: Running
start time: 10/Jul/2017:13:43:37 +0300
start since: 4360
requests: 1995
request duration: 109068
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
************************
pid: 1465
state: Running
start time: 10/Jul/2017:13:43:41 +0300
start since: 4356
requests: 1994
request duration: 1107
request method: GET
request URI: /status?full=1
content length: 0
user: -
script: -
last request cpu: 0.00
last request memory: 0
************************
pid: 1466
state: Finishing
start time: 10/Jul/2017:13:43:46 +0300
start since: 4351
requests: 2002
request duration: 2150107
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
************************
pid: 1467
state: Running
start time: 10/Jul/2017:13:43:50 +0300
start since: 4347
requests: 1982
request duration: 1665791
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
************************
pid: 1468
state: Running
start time: 10/Jul/2017:13:43:58 +0300
start since: 4339
requests: 1961
request duration: 1806011
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
************************
pid: 1469
state: Running
start time: 10/Jul/2017:13:44:00 +0300
start since: 4337
requests: 1965
request duration: 1094647
request method: GET
request URI: /index.php
content length: 0
user: -
script: /var/www/losst/data/www/losst.ru/index.php
last request cpu: 0.00
last request memory: 0
php-fpm config:
[losst]
pm = dynamic
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_children = 10
pm.max_spare_servers = 5
php_admin_value[display_errors] = stderr
php_admin_value[log_errors] = On
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s
listen = /var/www/php-fpm/losst.sock
listen.mode = 0660
listen.owner = losst
listen.group = apache
user = losst
group = losst
chdir = /
Конфиг Nginx:
server{
server_name losst.ru www.losst.ru;
ssl on;
ssl_certificate "/var/www/losst.ru_le2.crtca";
ssl_certificate_key "/var/www/losst.ru_le2.key";
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000;";
charset off;
index index.php;
disable_symlinks if_not_owner from=$root_path;
access_log /var/www/httpd-logs/losst.ru.access.log;
error_log /var/www/httpd-logs/losst.ru.error.log error;
ssi off;
set $root_path /var/www/losst/data/www/losst.ru;
root $root_path;
listen 194.67.215.125:443 http2 default_server;
location / {
try_files $uri $uri/ /index.php?$args;
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f admin@losst.ru";
fastcgi_pass unix:/var/www/php-fpm/losst.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
}
Глобальный конфиг Nginx:
user apache;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
load_module "modules/ngx_http_testcookie_access_module.so";
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format css '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$document_root" "$document_uri" '
'"$fastcgi_path_info" "$fastcgi_script_name" '
'"$proxy_host" '
'"$proxy_host" "$proxy_add_x_forwarded_for" '
'"$realpath_root"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_vary on;
gzip_types text/css text/plain application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
gzip_proxied any;
include /etc/nginx/vhosts/*/*.conf;
Вывод slow.log:
[10-Jul-2017 13:33:57] [pool losst] pid 1128
script_filename = /var/www/losst/data/www/losst.ru/index.php
[0x00007f0662573218] wpseo_init() /var/www/losst/data/www/losst.ru/wp-content/plugins/wordpress-seo/wp-seo-main.php:253
[0x00007ffce42b39b0] wpseo_init() unknown:0
[0x00007f0662572a20] call_user_func_array() /var/www/losst/data/www/losst.ru/wp-includes/class-wp-hook.php:298
[0x00007f06625728a8] apply_filters() /var/www/losst/data/www/losst.ru/wp-includes/class-wp-hook.php:323
[0x00007f0662572158] do_action() /var/www/losst/data/www/losst.ru/wp-includes/plugin.php:453
[0x00007f066256baf0] do_action() /var/www/losst/data/www/losst.ru/wp-settings.php:325
[0x00007f066256b6f8] +++ dump failed
[10-Jul-2017 13:33:57] [pool losst] pid 1131
script_filename = /var/www/losst/data/www/losst.ru/index.php
[0x00007f0662573cf8] call_user_func_array() /var/www/losst/data/www/losst.ru/wp-includes/class-wp-hook.php:298
[0x00007f0662573890] apply_filters() /var/www/losst/data/www/losst.ru/wp-includes/plugin.php:203
[0x00007f06625736d8] apply_filters() /var/www/losst/data/www/losst.ru/wp-includes/l10n.php:134
[0x00007f06625735f0] translate() /var/www/losst/data/www/losst.ru/wp-includes/l10n.php:202
[0x00007f06625732c8] __() /var/www/losst/data/www/losst.ru/wp-includes/widgets/class-wp-widget-media-audio.php:26
[0x00007f0662573080] __construct() /var/www/losst/data/www/losst.ru/wp-includes/class-wp-widget-factory.php:106
....
[10-Jul-2017 13:33:58] [pool losst] pid 1132
script_filename = /var/www/losst/data/www/losst.ru/index.php
[0x00007f0662572060] +++ dump failed
[10-Jul-2017 13:33:59] [pool losst] pid 1129
script_filename = /var/www/losst/data/www/losst.ru/index.php
[0x00007f066257e338] translate_entry() /var/www/losst/data/www/losst.ru/wp-includes/pomo/translations.php:85
[0x00007f066257e098] translate_entry() /var/www/losst/data/www/losst.ru/wp-includes/pomo/translations.php:95
[0x00007f066257def8] translate() /var/www/losst/data/www/losst.ru/wp-includes/l10n.php:123
[0x00007f066257de10] translate() /var/www/losst/data/www/losst.ru/wp-includes/l10n.php:202
[0x00007f06625747c0] __() /var/www/losst/data/www/losst.ru/wp-includes/script-loader.php:83
[0x00007ffce42b2db0] wp_default_scripts() unknown:0
[0x00007f0662573fc8] call_user_func_array() /var/www/losst/data/www/losst.ru/wp-includes/class-wp-hook.php:298
[0x00007f0662573e50] apply_filters() /var/www/losst/data/www/losst.ru/wp-includes/class-wp-hook.php:323
[0x00007f06625739f0] do_action() /var/www/losst/data/www/losst.ru/wp-includes/plugin.php:515
[0x00007f06625738d8] do_action_ref_array() /var/www/losst/data/www/losst.ru/wp-includes/class.wp-scripts.php:162
[0x00007f0662573790] init() /var/www/losst/data/www/losst.ru/wp-includes/class.wp-scripts.php:144
[0x00007f06625735e8] __construct() /var/www/losst/data/www/losst.ru/wp-includes/functions.wp-scripts.php:23
[0x00007f06625733e0] wp_scripts() /var/www/losst/data/www/losst.ru/wp-includes/functions.wp-scripts.php:146