LINUX.ORG.RU
ФорумAdmin

Сайт тормозит и php перегружает процессор

 , , , ,


1

6

Несколько дней назад заметил, что сайт стал очень сильно тормозить, загрузка одной страницы до 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


Последнее исправление: Seriyyy95 (всего исправлений: 1)

Вообще мне кажется, что проблема или в вордпрессе, или в mysql.

Я, конечно, посоветую вам сделать nginx вот так:

worker_processes  4; // у вас же четыре ядра - смело ставьте

events {
    worker_connections  1024;
    use epoll; // тоже может бустануть производительность.
}

а для fpm что-то подобное:

pm = dynamic
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_children = 10
pm.max_spare_servers = 5

Но вряд ли это вас спасет. В момент провисаний запросов попробуйте в top половить особо жрущие процессы. Если там mysql расплодился - опять же, во время провисания смотрите show processlist и смотрите, какой запрос повис. И пройдитесь mysqltuner'ом по базе.

Но вообще вот только что попинал сайт - какие-то страницы работают нормально, какие-то нет.

l0stparadise ★★★★★
()
Ответ на: комментарий от l0stparadise

Хм, спасибо. Настройки Nginx похоже помогли чуть, судя по pingdom время ожидания ответа от Nginx уменьшилось с 400 до 200 мс, но с PHP ничего не изменилось, к сожалению.

Seriyyy95
() автор топика
Ответ на: комментарий от anonymous

Лог есть, да только там ничего нет полезного:

[10-Jul-2017 13:33:26] NOTICE: fpm is running, pid 1117
[10-Jul-2017 13:33:26] NOTICE: ready to handle connections
[10-Jul-2017 13:33:26] NOTICE: systemd monitor interval set to 10000ms
[10-Jul-2017 13:33:32] WARNING: [pool losst] child 1127, script '/var/www/losst/data/www/losst.ru/index.php' (request: "GET /index.php") executing too slow (1.329223 sec), logging
[10-Jul-2017 13:33:32] NOTICE: child 1127 stopped for tracing
[10-Jul-2017 13:33:32] NOTICE: about to trace 1127
[10-Jul-2017 13:33:32] ERROR: failed to ptrace(PEEKDATA) pid 1127: Input/output error (5)
[10-Jul-2017 13:33:32] NOTICE: finished trace of 1127
[10-Jul-2017 13:33:32] WARNING: [pool losst] child 1124, script '/var/www/losst/data/www/losst.ru/index.php' (request: "GET /index.php") executing too slow (1.077945 sec), logging
[10-Jul-2017 13:33:32] NOTICE: child 1124 stopped for tracing

Seriyyy95
() автор топика
Ответ на: комментарий от int13h

Вот:

# Thread_id: 47  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.003115  Lock_time: 0.000083  Rows_sent: 1  Rows_examined: 9230
SET timestamp=1499692509;
SELECT rating_username, rating_rating, rating_ip FROM wpfc_ratings WHERE rating_postid = 118;
# Time: 170710 16:15:13
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 82  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.000743  Lock_time: 0.000210  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692513;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/sozdanie-i-nastrojka-lvm-linux');
# Time: 170710 16:15:18
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 104  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.000846  Lock_time: 0.000211  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692518;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/ustanovka-chrome-50-ubuntu-16-04');
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 112  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.000530  Lock_time: 0.000148  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692518;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/feed');
# Time: 170710 16:15:20
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 122  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.000534  Lock_time: 0.000143  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692520;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/kak-polzovatsya-aircrack-ng-wpa-i-wpa2');
# Time: 170710 16:15:22
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 133  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.000540  Lock_time: 0.000147  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692522;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/ustanovka-linux-mint-17-3');
# Time: 170710 16:15:23
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 136  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.000670  Lock_time: 0.000157  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692523;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/ustanovka-drajvera-intel-v-ubuntu-16-04');
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 141  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.000736  Lock_time: 0.000194  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692523;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/mi-band-2-ne-podklyuchaetsya-k-telefonu');
# Time: 170710 16:15:26
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 159  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.002729  Lock_time: 0.001169  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692526;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/nastrojka-samba-v-ubuntu-15-10');
# Time: 170710 16:15:27
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 161  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.001257  Lock_time: 0.000488  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692527;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/wp-content/uploads/2016/05/avidemux-12-1-1.png');
# Time: 170710 16:15:29
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 162  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.001617  Lock_time: 0.000490  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692529;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/wp-content/uploads/2016/05/skype-1-ubuntu-16.04-Xenial-Xerus-Linux-64-bit-1-1.png');
# Time: 170710 16:15:35
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 190  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.002863  Lock_time: 0.001178  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692535;
SELECT wpfc_redirection_items.*,wpfc_redirection_groups.position AS group_pos FROM wpfc_redirection_items INNER JOIN wpfc_redirection_groups ON wpfc_redirection_groups.id=wpfc_redirection_items.group_id AND wpfc_redirection_groups.status='enabled' AND wpfc_redirection_groups.module_id=1 WHERE (wpfc_redirection_items.regex=1 OR wpfc_redirection_items.url='/ustanovka-libreoffice-v-ubuntu-16-04');
# Time: 170710 16:15:37
# User@Host: kibqdskz_user[kibqdskz_user] @ localhost []
# Thread_id: 196  Schema: kibqdskz_db  QC_hit: No
# Query_time: 0.001265  Lock_time: 0.000408  Rows_sent: 0  Rows_examined: 2
SET timestamp=1499692537;

Seriyyy95
() автор топика
Ответ на: комментарий от int13h

Отключил плагин redirection, лог больше не пополняется так интенсивно, но ситуация не улучшилась.

Seriyyy95
() автор топика

Покажите php.ini

И заодно конфиг fpm (который основной, а не ваш пул)

и совсем до кучи - strace -cp <PID> по любому процессу fpm

l0stparadise ★★★★★
()
Последнее исправление: l0stparadise (всего исправлений: 2)
Ответ на: комментарий от Seriyyy95

Там иногда SIGSEGV бывают, а так конечно /var/log/nginx *error_log*

Проверьте, какие расширения грузятся + включено ли кэширование байт-кода

anonymous
()
Ответ на: комментарий от l0stparadise

Вот:

[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions = passthru, shell_exec, system, proc_open, popen, parse_ini_file, show_source
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 428M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 100M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 100M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Europe/Moscow
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
[Assertion]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[ISPmgr]
xcache.size = 260M

Seriyyy95
() автор топика
Ответ на: комментарий от l0stparadise

php-fpm.conf

include=/etc/php-fpm.d/*.conf
[global]
pid = /run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = no
Seriyyy95
() автор топика
Ответ на: комментарий от l0stparadise
# strace -cp 7191
Process 7191 attached
^CProcess 7191 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 21.88    0.008477           0     17790      1028 lstat
 16.72    0.006478           1      5362           munmap
 12.73    0.004933           8       590           sendto
 10.06    0.003897           1      5553           open
  9.06    0.003511           3      1180           select
  6.97    0.002702           0     16285           fstat
  6.68    0.002588           0      5362           mmap
  5.01    0.001940           0      5631           close
  3.24    0.001257          25        50           brk
  3.21    0.001243           1      1827       300 access
  2.07    0.000801           1      1562           read
  1.05    0.000406           1       662           recvfrom
  0.63    0.000243           0       512           getcwd
  0.15    0.000058           5        11           flock
  0.14    0.000055           1       110           getdents
  0.12    0.000045           0        93           poll
  0.07    0.000027           0       325           lseek
  0.06    0.000023           0       105         3 write
  0.05    0.000021           0        55           openat
  0.03    0.000012           0        68         1 stat
  0.02    0.000007           1        11           socket
  0.02    0.000007           1        11           connect
  0.01    0.000003           0        12           accept
  0.01    0.000003           0        23           shutdown
  0.01    0.000003           0        66           fcntl
  0.01    0.000002           0        44        11 setsockopt
  0.00    0.000001           0        34           rt_sigaction
  0.00    0.000001           0        12           rt_sigprocmask
  0.00    0.000001           0        48           setitimer
  0.00    0.000001           0        24           chdir
  0.00    0.000001           0        24           times
  0.00    0.000000           0        11           pwrite
------ ----------- ----------- --------- --------- ----------------
100.00    0.038747                 63453      1343 total

Seriyyy95
() автор топика
Ответ на: комментарий от Seriyyy95
21.88    0.008477           0     17790      1028 lstat
 6.97    0.002702           0     16285           fstat
 3.21    0.001243           1      1827       300 access

Меня смущают вот эти три строчки минимум. ХЗ что вам посоветовать. В идеале strace'ом ловить, какие файлы пытается читать fpm и решать проблему с ними, но тут с вашей нагрузкой задача та еще.

Но если тыкать пальцем в небо - предположений у меня два.

Первое - это что-то, работающее через open_basedir. В конфигах ничего подобного вроде нет, но вы можете создать файлик с кодом

<?
phpinfo();
?>
, открыть через браузер и посмотреть, есть ли там такая переменная. Если есть - жестко отключите ее (или в php.ini, или в конфиге fpm для вашего пула - второй вариант лучше). Ну или ищите, откуда она тянется.

Второе - у вас php-сессии хранятся файлами. Попробуйте завернусь php-сессии в memcached (вроде я его видел у вас на скрине) или в redis. Вряд ли это даст какой-то значимый эффект, но может и получится.

l0stparadise ★★★★★
()

Покажи, сколько занимают каталоги с кешем Покажи, сколько записей в таблицах с кешем в базе данных Можешь отсортировать записи из mysql slow_log по времени выполнения?

anonymous
()

В случае с wp надо всегда сначала смотреть, не брутят ли тебя.
У тебя открыта админка https://losst.ru/wp-login.php , есть смысл закрыть ее для всех ip, кроме твоего, и посмотреть результат.

xtraeft ★★☆☆
()
Ответ на: комментарий от Seriyyy95

session.save_handler = files

мож сессии надо в мемкашу тоже засунуть. надо посмотреть на waitы при большой загрузке.

anonymous
()
Ответ на: комментарий от anonymous

Да не может оно тормозить из-за сессий при 15к суточном трафике, большинство из которых судя по всему даже неавторизованые пользователи.

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

у нас есть писанинка, которая лочит файлы сессий и на 50 клиентах -) так что надо проверять...

anonymous
()
Ответ на: комментарий от anonymous

Так движок ведь известен - wordpress, у него такой проблемы нет. Я практически уверен, что причина в брутфорсе админки.

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

Пытался закрыть доступ к wp-admin, но сейчас вечер, нагрузка немного упала, загрузка процессора держится на уровне 70-100%, но сайт по прежнему грузится долго. Нужно будет тестировать с утра. И еще только что проверил скорость по pingdom, Wait time составил до 10 секунд, с чего бы это? https://losst.ru/wp-content/uploads/2017/07/Snimok-ekrana-ot-2017-07-10-22-18...

Seriyyy95
() автор топика
Ответ на: комментарий от l0stparadise

Значение open_basedir - no value. Так понимаю, что она отключена, завтра еще попробую сессии PHP добавить в memcached.

Seriyyy95
() автор топика

Я вот думаю, допустим это даже поисковики, они же не будут писать комментарии, рыть поиск и т д. Они запрашивают обычные страницы. Им должна отдаваться статика (кэширование включено), а значит никакой нагрузки на PHP быть не должно. А она есть. Есть ли какой-нибудь инструмент, чтобы посмотреть при такой нагрузке что, кто и где делает, например, анализатор логов access.log? Как понять откуда та нагрузка?

Seriyyy95
() автор топика
Ответ на: комментарий от Seriyyy95

Пытался закрыть доступ к wp-admin, но сейчас вечер, нагрузка немного упала

Не вижу связи.
Переименуй хотя бы wp-login.php.
А второе, что надо смотреть - это iotop/iostat. Хостишься на своем сервере или вдс?

xtraeft ★★☆☆
()
Ответ на: комментарий от anonymous

Папка с кєшем от w3tc занимает 68 мегабайт, в memcached занято около 19 мб, если я правильно понял:

STAT bytes_read 30316795
STAT bytes_written 90445254
STAT limit_maxbytes 268435456
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 3
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 19972555

Seriyyy95
() автор топика
Ответ на: комментарий от Seriyyy95

access.log анализировать можно(и нужно) с помощью стандартного набора из cat,tail,awk,sort и uniq.

С помощью конвеера из данных команд с нужными параметрами вы можете получить статистику по количеству запросов к тому или иному URL, статистику по количеству запросов для каждого или наиболее активных IP и т.п.

Но, как правило, одних логов в подобной ситуации не достаточно, что-бы понять почему именно длительное время висят запросы к скриптам сайта нужен strace одного из нагруженных обработчиков php-fpm.

Просто найдите обработчик php создающий наибольшую нагрузку(ps и atop), а потом трейсите по pid процесса. Трейсить лучше с опцией -o в файл, так как данных при вашей посещаемости будет скоре всего немало, затем нужно просто поискать места, где возникают Timeout, множественные ошибки доступа к файлам, или мелькают очень часто повторяющиеся идентичные блоки из набора определённых системных вызовов(такое бывает, если в результате логической ошибки код в скриптах где-то зациклен).

Если посещаемость ресурса большая, и из-за большого колчества запросов трейс затруднён, можно на время(к примеру ночью, когда посетителей меньше) перенаправить всех посетителей не с вашего внешнего ip на статический сайт-заглушку, тогда у вас появится пару десятков минут для вдумчивого трейса проблемных скриптов. И при этом запросы от других посетителей сайта не будут вам мешать трейсить скрипты сайта. Главное не забыть потом убрать заглушку:)

lucentcode ★★★★★
()
Последнее исправление: lucentcode (всего исправлений: 1)
Ответ на: комментарий от Seriyyy95

И еще неплохо было бы написать, с чего все началось. Были ли тормоза изначально, или появились недавно? Какие то изменения может были?

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

Да, есть брут, но там не очень активно. Идет четыре попытки с одного IP, потом IP меняется, видимо попадает в бан wordpress. Интервал между сериями в несколько минут. Попробую закрыть и посмотрю что будет. Спасибо!

Seriyyy95
() автор топика
Ответ на: комментарий от xtraeft

Раньше все работало отлично, если брать тот же pingdom, то сайт загружался за плюс минус две секунды. Ничего не менялось. Буквально три дня назад нагрузка начала расти и вот до сих пор.

Seriyyy95
() автор топика
Ответ на: комментарий от Seriyyy95

Ну если ничего не менялось, то можно рассмотреть вариант с хостером: например диски начали тормозить.
Глянь iotop/iostat.

xtraeft ★★☆☆
()
Ответ на: комментарий от Seriyyy95

Значит пропускаем.
Тут видишь какое дело: если бы это например различные боты долбили страницы, то тормозить не должно - у тебя же все закешировано в статику.
Если бы проблема была с mysql - то в топе бы висел мускул, а не php-fpm.
Ну и хоть это не сильно поможет, но все равно - php7 с включенным opcache же юзаешь, разумеется?

xtraeft ★★☆☆
()

Может какой-то вордпрес плагин заглючил, попробуй повыключать и посмотреть на результаты.

goingUp ★★★★★
()

нет ли особо жирного контента ?
php-fpm может подвисать при ресайзе жирных картинок, например.

Deleted
()
Ответ на: комментарий от Seriyyy95

Надо обязательно переехать на 7, но это не отменяет того вопроса, что раньше не тормозило а теперь начало :) Конкретно wp чуть ли не в 2 раза быстрее работает на 7, по сравнению с 5. Ну это так, оффтоп.

xtraeft ★★☆☆
()
Последнее исправление: xtraeft (всего исправлений: 1)
Ответ на: комментарий от Seriyyy95

Медиафайлы есть, но насколько я знаю wordpress их обрабатывает во время загрузки, а пользователям отдает уже статику.

Seriyyy95
() автор топика
Ответ на: комментарий от Seriyyy95

Погуглите «fail2ban wordpress». Скрипт будет сканить логи на предмет login failed и банить эти ipшники с помощью iptables на промежуток времени, который вы сами зададите. Скажем, пять попыток с одного ip за сутки - неделя бана. Таким образом запросы с брутящих адресов не будут доходить до php.

l0stparadise ★★★★★
()
Ответ на: комментарий от lucentcode

Плюсую этого господина. Можно для верности на время оставить один обработчик php-fpm, запустить стрейс (-ff -ttt -T), выполнить тормозящий запрос, дождаться его завершения, остановить стрейс и рестартовать fpm с нормальными настройками. А потом смотреть где тормозит php

anonymous
()
Ответ на: комментарий от l0stparadise

Так там же не с одного ип брутят, а ботнетами. Размораживайся :)
Оптимальное решение - ограничить доступ всем ip кроме своего.

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

Да это понятно. Но я не думаю, что там с каждого ip всего по одному запросу, поэтому какую-то часть он отрежет. Не настолько крупный сайт, чтобы какой-то более изощренный ботнет на несколько дней натравлять.

Но вообще да, резануть доступ к wp-login для всех вообще - решение интереснее :)

l0stparadise ★★★★★
()
Ответ на: комментарий от l0stparadise

Не настолько крупный сайт, чтобы какой-то более изощренный ботнет на несколько дней натравлять.

Это не так работает, конкретно на какие-то сайты никто ничего не направляет: берется большой список доменов и чекается, это ж бизнес.

Но я не думаю, что там с каждого ip всего по одному запросу

Чаще всего именно так.

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

Запросы на wp-login все еще есть, но теперь та страница закрыта аутентификацией Nginx. Теперь они php трудностей не составляют, нагрузка на процессор от php упала. Всем спасибо. Возможно действительно только в этом было дело. Вот даже сейчас есть:

194.28.115.251 - - [11/Jul/2017:14:36:10 +0300] "POST /wp-login.php HTTP/1.1" 200 1784 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 5.0) AppleWebKit/533.01.54 (KHTML, like Gecko) Version/5.5.1 Safari/532.19"
194.28.115.251 - - [11/Jul/2017:14:36:11 +0300] "POST /wp-login.php HTTP/1.1" 200 1784 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_38_81) AppleWebKit/532.87.40 (KHTML, like Gecko) Chrome/57.4.9903.5275 Safari/534.58"
194.28.115.251 - - [11/Jul/2017:14:36:11 +0300] "POST /wp-login.php HTTP/1.1" 200 1784 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 5.0) AppleWebKit/534.00.53 (KHTML, like Gecko) Version/4.6.1 Safari/532.28"
194.28.115.251 - - [11/Jul/2017:14:36:11 +0300] "POST /wp-login.php HTTP/1.1" 200 1784 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 5.0) AppleWebKit/534.00.53 (KHTML, like Gecko) Version/4.6.1 Safari/532.28"
194.28.115.251 - - [11/Jul/2017:14:36:11 +0300] "POST /wp-login.php HTTP/1.1" 200 1784 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 5.0) AppleWebKit/534.00.53 (KHTML, like Gecko) Version/4.6.1 Safari/532.28"
194.28.115.251 - - [11/Jul/2017:14:36:12 +0300] "POST /wp-login.php HTTP/1.1" 200 1784 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/533.95.58 (KHTML, like Gecko) Version/5.5.0 Safari/532.13"
194.28.115.251 - - [11/Jul/2017:14:36:12 +0300] "POST /wp-login.php HTTP/1.1" 200 1785 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/533.95.58 (KHTML, like Gecko) Version/5.5.0 Safari/532.13"
194.28.115.251 - - [11/Jul/2017:14:36:12 +0300] "POST /wp-login.php HTTP/1.1" 200 1785 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/536.29.82 (KHTML, like Gecko) Chrome/54.8.3157.9429 Safari/531.90"
194.28.115.251 - - [11/Jul/2017:14:36:12 +0300] "POST /wp-login.php HTTP/1.1" 200 1785 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.57.10) Gecko/20168241 Firefox/52.57.10"
194.28.115.251 - - [11/Jul/2017:14:36:13 +0300] "POST /wp-login.php HTTP/1.1" 200 1785 "https://losst.ru/wp-login.php" "Mozilla/5.0 (Windows NT 5.0) AppleWebKit/533.01.54 (KHTML, like Gecko) Version/5.5.1 Safari/532.19"

Сейчас среднее время загрузки 3-4 секунд что в принципе норма. Завтра еще планирую обновить Nginx до последней версии с полной поддержкой http2 и обновить PHP до 7.0. Плюс сессии пользователей в memcached и настрою opcode. Надеюсь после этого скорость еще вырастет. Но вообще очень странно, что запросы на одну страницу смогли так уложить сайт.

Seriyyy95
() автор топика
Ответ на: комментарий от Seriyyy95

Но вообще очень странно, что запросы на одну страницу смогли так уложить сайт.

Мда, школьничек какой-то с одного ip брутит :)

xtraeft ★★☆☆
()
Ответ на: комментарий от Seriyyy95

т.е. можно было простым логическим путем (методом исключения) выяснить причину, тем самым сузив интервал поиска в разы: отключить или как-то по иному закрыть доступ к внешней сети ...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.