У меня есть сайт WordPress WooCommerce с 3500 продуктами и 100 пользовательскими атрибутами (обычно 4-7 для каждого продукта) (главной странице требуется оптимизация изображения) (общий размер 4 МБ). Серверы часто отстают, задерживая ответ страницы 10 + сек. (Я не знаю, связано ли это с проблемой или это просто php opcache, если я попытаюсь запустить php echo 'test', а затем изменить его на echo 'test2', URL даст мне test вместо test2) .
Есть 5-6 человек, использующих панель администратора (все из 1 соединения с загрузкой 5 Мбит / с / загрузкой 0,7 Мбит / с).
Когда 5-6 человек используют сайт, он начинает показывать огромную задержку (10 + сек). Я смотрю, как определить ошибку или определить узкое место / проблему.
ОЗУ: Из 32 ГБ используется только 2 ГБ (видно изображение монитора htop)
nginx регистрирует предупреждения / ошибки о некоторых устаревших функциях WooCommerce
также иногда отчет консоли браузера не может загрузить admin-ajax.php
Журнал ошибок получает 20 МБ за один день с ошибками устаревания.
Обновление файлов PHP LOG сообщало все время
[09-May-2018 22:06:28] WARNING: [pool www] server reached pm.max_children setting (15), consider raising it
[09-May-2018 21:19:52] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 5 idle, and 14 total children
У меня увеличилось число детей до 150 min_spare 17 start 35 max_spare 50,
но все же, когда я обновляю страницу в edit.php (панель администратора), у меня 4.83s ожидания
Queued at 0
Started at 0.20 ms
Resource Scheduling TIME
Queueing
0.20 ms
Connection Start TIME
Stalled
1.27 ms
DNS Lookup
0.53 ms
Initial connection
45.20 ms
Request/Response TIME
Request sent
31 μs
**Waiting (TTFB) 4.83 s**
Content Download
287.13 ms
Spec:
error.log
Фотографии htop, лог доступа в конце:
Config:
NGINX config
user www-data;
worker_processes 8;
pid /run/nginx.pid;
events {
worker_connections 1024;
# multi_accept on;
}
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
proxy_temp_path /var/tmp;
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
types_hash_max_size 2048;
server_tokens off;
client_max_body_size 20M;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#access_log off;
#error_log off;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Обновление 1
Если я не авторизован на сайте, отвечаю TTFB за 30 мс (загружается полностью через 1-3 с). Если я зашел на сайт, ответьте TTFB за 5000 мс (загружается полностью за 7-9 секунд).
Обновление 2
Если все (плагины) включено, любая страница, связанная с продуктами WooCommerce, будет иметь задержку ответа TTFB 4-6 секунд. несвязанные страницы (Контакт, Общие настройки, Сообщения, Страницы, установка плагина будут иметь низкий TTFB (800 мс - 1200 мс)
Если я деактивирую все плагины, TTFB снижается до 500 мс 0,5 с. Если я включу любой плагин, кроме Woocommerce, TTFB будет 500-700 мс.
Если я отключу все плагины и включу только Woocommerce и попытаюсь получить доступ к списку продуктов, страница задержит TTFB на 5 секунд (+ загрузка контента).
Я создал собственную дочернюю тему на основе витрины магазина. Если я изменю активную тему, WooCommerce по-прежнему будет иметь ту же неисправность (5 секунд TTFB, ожидающих в списке продуктов).
Если я нахожусь на анонимной вкладке Chrome (не вошел в систему) и обновляюсь, страница загружается быстро. У меня включены Nginx, PHP opcache и общий кеш w3 (если я очищаю кеш, анонимному сеансу понадобится 5 секунд TTFB для загрузки страницы с продуктами).
Я также попробовал свежую установку WordPress. Загрузите только WooCommerce с магазином и скопируйте базу данных с живого сайта. Проблема сохраняется (если вы попытаетесь просмотреть список продуктов на панели администратора, вы получите ответ ожидания TTFB 4 с).
Благодаря приведенному ниже комментарию я установил Newrelic. parse_query 2.0 миллиона менее чем за 30 минут:
Обновление 3 WP_List_Table :: отображение, содержащее продукты, занимает слишком много времени для выполнения
Может ли причиной задержки быть печать php? и запросы к базе данных, связанные с продуктом (см. update3)
wp-admin / edit.php (список продуктов woocommerce)
template-homepage (содержит 2 слайд-шоу товаров)
Архив продукта (содержит список продукта + woof -> плагин атрибутного фильтра)
Одностраничный продукт также с некоторой задержкой
В админке я получаю в консоли консоли сообщение об ошибке [DOM] Найдено 2 элемента с неуникальным идентификатором # in-product_cat-99:
Каждый запрос к базе данных составляет 14-30 мс, но на трассировке веб-транзакции видно, что печать продуктов (WP_List_Table :: display) занимает слишком много времени.
Как я могу это исправить? Это плохая конфигурация php? плохой код? sql плохая конфигурация?
PHP config: ссылка со всеми моими файлами (nginx php mariadb)
Изображения нового реликвия: