我正在运行一个WordPress网站,每月有50万访问者,并且有15万条帖子,平均每秒100次浏览量。我试图弄清楚服务器上的负载是否正常,或者我可以采取一些措施来解决性能问题,而又不增加服务器设置和每月费用。
这是我现在正在运行的服务器设置:
如果我已经优化查询并最大程度地减少了插件的使用(总共5个插件),那么WordPress主题便是从零开始开发的。
我运行带有反向代理缓存的Nginx,在其中我将所有页面缓存5分钟,以便能够处理流量高峰(发送新闻通讯时,在30分钟内每天有3k访客出现两个每日高峰)。
MariaDB和Redis服务器正在使用开箱即用的配置运行Debian。我唯一更改的是MariaDB中的innodb_buffer_pool_size = 11G和max_connections = 300。
当有100个实时访问者时,DB CPU的运行率为50%,而有300-700个实时访问者时则为85-90%。
问题在于,即使CPU负载为50%,查询也需要花费一些时间(3-6秒)来加载。
我的登台环境在完全相同的服务器上运行,但具有另一个数据库表(帖子数量相同),查询时间为0,5-1,5秒。
所以唯一的区别是生产数据库具有更多的并发用户。
是什么原因使查询需要这种时间来加载?
答案 0 :(得分:0)
听起来像您需要节点平衡器或更强大的服务器。
您有500,000位访问者,每秒访问100次页面,Wordpress非常笨拙,并且以序列化数据库中的对象而闻名(每个显示的组件都是查询)。假设您有一个简单的网站(15个查询)和5个插件(10个查询),现在将25乘以100浏览量,而在16 GB的RAM上每秒有2500个查询。这意味着每个查询将获得约0.0064 GB的内存或6.4 MB。
除非您的数据库中的表足够小以适合4.25软盘,否则我建议您使用更多功能。
答案 1 :(得分:0)
由于架构效率低,使用wp_postmeta
的查询速度很慢。您可以解决该问题。
请参见http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta
这将比“在问题上投入硬件”有更多帮助。