我有一个WordPress WooCommerce网站,拥有3.500个产品和100个自定义属性(通常每个产品4-7个)(首页需要图像优化)(总大小为4MB)。服务器经常滞后于延迟页面响应10 +秒。 (我不知道它是否与问题有关,或者只是php opcache,如果我尝试运行php echo' test'然后将其更改为echo' test2&# 39;网址将给我测试而不是test2)。
有5-6人使用管理仪表板(全部来自1个连接,5mbps下载/ 0.7mbps上传)。
当5-6人使用该网站时,它开始显示出巨大的延迟(10 +秒)。我正在寻找如何发现错误或找出瓶颈/问题。
RAM: 32 GB使用仅2GB(见htop显示器图片) nginx错误记录有关某些WooCommerce弃用函数的警告/错误 有时浏览器控制台报告无法加载admin-ajax.php 错误日志在一天内变为20MB,弃用错误。
更新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分钟_sare 17 start 35 max_spare 50, 但是当我在edit.php(管理仪表板)刷新页面时,我还有4.83秒等待
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
规格:
8个核心:每个4200个bogomips
Nginx with PHP7.2-fpm
Mariadb innodb表
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/*;
}
如果我未登录该站点,则在30ms内响应TTFB(在1-3秒内完全加载)。如果我登录该站点,则在5000毫秒内响应TTFB(在7-9秒内完全加载)。
如果启用了所有内容(插件),则与WooCommerce产品相关的任何页面都将具有4-6秒的TTFB响应延迟。不相关的页面(联系人,常规设置,帖子,页面,插件安装将具有低TTFB(800ms-1200ms)
如果我停用所有插件,TTFB会下降到500毫秒0.5秒。如果我启用除Woocommerce之外的任何插件,TTFB将为500-700ms。
如果我禁用所有插件并且我只启用Woocommerce并尝试访问产品列表,则页面将延迟TTFB 5秒(+加载内容)。
我根据店面建立了自己的孩子主题。如果我更改活动主题,WooCommerce仍会出现相同的故障(5秒TTFB等待产品列表)。
如果我在匿名Chrome标签页(未登录)并刷新,则页面会快速加载。我启用了Nginx,PHP opcache和w3总缓存(如果我清除缓存,匿名会话将需要TTFB 5秒来加载带有产品的页面)。
我也尝试了一个新的WordPress安装。仅使用店面下载WooCommerce并从实时站点复制数据库。问题仍然存在(如果您尝试查看管理仪表板中的产品列表,您将获得4秒TTFB等待响应)。
感谢下面的评论者,我安装了Newrelic。 parse_query在不到30分钟内完成2.0百万次:
更新3 WP_List_Table ::包含产品的显示需要花费太多时间才能执行
延迟的原因可能是php打印吗?和与产品相关的数据库查询(参见update3)
wp-admin / edit.php(woocommerce产品列表) 模板主页(包含2张产品幻灯片) 存档产品(包含产品列表+ woof - >属性过滤插件) 单页产品也有些延迟
在管理员上我为[DOM]发现broswer控制台错误找到了2个具有非唯一ID的元素#in-product_cat-99:
数据库查询各占14-30ms,但在Web事务跟踪中可以看出打印产品(WP_List_Table :: display)需要花费太多时间。
我该如何解决这个问题?这是不好的PHP配置?坏代码? sql配置不好?
PHP配置:link with all my files (nginx php mariadb)
新报告的图片:
答案 0 :(得分:0)
这是慢查询吗?
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
)吗?要求一组有限的列可以加速查询和/或可能提供额外的优化选项。
如果优化程序决定以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
上添加索引,则有几个选项。见http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta
该链接提供了基于WordPress的“many:many”映射表的其他性能建议。我假设wp_termmeta
就是这样一张桌子。也许其他一些人也是?
请为4个表中的每个表提供SHOW CREATE TABLE
,如果您想进一步讨论,请EXPLAIN SELECT ...
。