我有一个WordPress WooCommerce站点,包含3.500个产品和100个自定义属性(通常每个产品4-7个)(头版需要图像优化) (4MB的总大小)。服务器经常延迟延迟页面响应10+sec。(我不知道它是否与问题有关,还是仅仅是php opcache,如果我尝试运行php echo ' test‘,然后将它更改为echo 'test2’,url将给我测试而不是test2)。
有5-6人使用管理仪表板(全部从1连接到5 5mbps下载/ 0.7mbps上传)。
当5-6人使用该网站时,它开始显示出巨大的延迟(10+sec)。我正在寻找如何发现错误或识别瓶颈/问题。
RAM:仅使用来自32 GB (见htop监视器映像) nginx错误日志的2GB的nginx错误日志,还有一些浏览器控制台报告,无法加载admin-ajax.php错误日志,在一天内收到20 GB的反推荐错误警告/错误。
更新PHP文件一直在报告
[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启动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
规格:
htop的照片,访问日志的末尾:
配置:
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
如果我没有登录站点,请在30 an内响应TTFB (在1-3秒内完全加载)。如果我登录到站点,请在5000 am内响应TTFB (在7-9秒内完全加载)。
更新2
如果启用了所有插件(插件),任何与WooCommerce产品相关的页面都将有4-6秒的TTFB响应延迟。无关的页面(联系人,一般设置,帖子,页面,插件安装将有低的TTFB (800 low 1200 Low))
如果我关闭所有插件,TTFB将降至500 If,0.5秒。如果我启用除Woocommerce之外的任何插件,TTFB将是500-700毫秒。
如果我禁用所有插件,并且只启用Woocommerce并尝试访问产品列表,页面将延迟TTFB 5秒(+加载内容)。
我已经建立了自己的孩子主题基于店面。如果我更改活动主题,WooCommerce仍然有相同的故障(5秒TTFB等待产品列表)。
如果我在匿名Chrome选项卡中(未登录)并刷新,页面将快速加载。我启用了Nginx、page和w3总缓存(如果我清除缓存,匿名会话将需要TTFB5秒来用产品加载页面)。
我也尝试过一个新的WordPress安装。只下载带有店面的WooCommerce并从活动站点复制数据库。问题仍然存在(如果您尝试在管理仪表板中查看产品列表,您将得到4秒的TTFB等待响应)。
感谢下面的一位评论员,我安装了Newrelic。在不到30分钟的时间内,parse_query就达到了200万:
包含产品的更新3 WP_List_Table::display要花费太多的时间来执行
造成延迟的原因是否是php打印?和与产品相关的数据库查询(见update3)
wp-admin/ed.php (woocommerce products list)模板-主页(包含2条产品幻灯片)存档产品(包含product+ woof ->属性过滤器插件列表)单页产品也有一些延迟
在admin上,我在broswer控制台中获得了DOM发现的两个元素的错误,这些元素具有非唯一的id # in -product_cat-99:
数据库查询每个查询14到30 is,但是在web事务跟踪上,可以看到打印产品(WP_List_Table::display)花费了太多的时间。
我怎么才能解决这个问题?这是糟糕的php配置吗?坏密码?sql配置不好吗?
PHP:链接到我的所有文件(nginx php mariadb)
新文物报告图片:
发布于 2018-05-23 02:03:44
这是慢速查询吗?
SELECT t.*, tt.*, tm.meta_value
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON t.term_id = tt.term_id
INNER JOIN wp_term_relationships AS tr
ON tr.term_taxonomy_id = tt.term_taxonomy_id
LEFT JOIN wp_termmeta AS tm
ON ( t.term_id = tm.term_id
AND tm.meta_key = ? )
WHERE tt.taxonomy IN (?)
AND tr.object_id IN (?)
GROUP BY t.term_id
ORDER BY tm.meta_value+? ASC,
t.name ASC
为什么是GROUP BY
?不GROUP BY
SELECT
子句中的所有非聚合列是“错误的”。您将得到其他列的不可预测的值。
对两个不同的表(tt和tr)进行过滤(WHERE
)使得优化器很难知道从哪个表开始。
您真的需要t
和tt
的所有列(t
)吗?请求一组有限的列可能会加速查询和/或提供额外的优化选项。
如果优化器决定从tt
开始,那么需要这些索引:
tt: (taxonomy)
t: (term_id)
tr: (term_taxonomy_id)
tm: (term_id, meta_key)
如果它以tr
开头
tr: (object_id, term_taxonomy_id)
plus most of the above
如果这些索引还不存在,就添加它们。
如果它不允许您在meta_key
上添加索引,则有几个选项。请参阅后元
该链接为基于WordPress的“多:多”映射表提供了其他性能建议。我假设wp_termmeta
就是这样的一张桌子。也许其他人也是?
请为这四个表中的每一个提供SHOW CREATE TABLE
,如果您想进一步讨论这一点,请提供EXPLAIN SELECT ...
。
https://stackoverflow.com/questions/50261243
复制相似问题