我有一个 Wordpress 网站,上面有超过 219k 条帖子,每次我发布内容时,我的 CPU/MySQL 使用率就会达到 100%。
我真的不知道为什么,因为我的整个网站全天的使用率都保持在 6%,并且只有在发布新帖子时才会出现峰值。
是的,我使用 w3 super cache,但问题出在 wp-admin 本身!我使用 mysqltuner 来优化 MySQL...但是,就像我已经说过的,问题只发生在发布新帖子时。
我使用亚马逊 AWS 上的两个云来托管博客。MySQL 云是m1.中等并且 Web 服务器是m1.xlarge。
这是我的 CPU 的图形,如你所见,我在两个云上同时出现了峰值……这些峰值恰好发生在我发布新帖子的时候。绿线是 MySQL和蓝线是 Web 服务器。
您可以在这里看到如下图表:https://i.stack.imgur.com/PReQP.png
如果没有人能帮我解决这种情况,拜托,我想要一些东西来“检查”代码...Wordpress 的整个结构太丑陋了,我无法理解新帖子是如何工作的。我想调试查询/函数或类似的东西。
谢谢!
答案1
我在 Medium 实例中遇到了类似的问题,但最终发现是我使用的主题出了问题。将主题更改为默认 WP 主题,看看问题是否仍然存在。主题的 function.php 文件中有一个函数无法正常工作。删除该函数解决了我的发布问题。
如果主题或者插件导致了问题,那么思路就会缩小。
示例:我必须从正在使用的主题中删除的功能是
// updates post id in sequential order by post date used for post page
function updateNumbers() {
global $wpdb;
$querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
ORDER BY $wpdb->posts.post_date ASC";
$pageposts = $wpdb->get_results($querystr, OBJECT);
$counts = 0 ;
if ($pageposts):
foreach ($pageposts as $post):
$counts++;
add_post_meta($post->ID, 'incr_number', $counts, true);
update_post_meta($post->ID, 'incr_number', $counts);
endforeach;
endif;
}
在多站点上更新到 4.2.4 后,导致问题的一个插件是“安装程序”。后端非常慢。删除此插件解决了此问题。
答案2
假设您已经很好地使用了 mysqltuner,那么问题很可能出在数据存储硬件上。
假设您的 MySQL 实例正在将数据保存到 EBS 卷上。您至少面临两个问题:
- EBS 速度慢
- 中型实例的 IO 性能相对于大型实例相对较慢。EBS 需要良好的 IO 性能。
尝试测量存储 MySQL 数据的 EBS 卷的文件系统性能,使用类似碘几周前我这样做的时候,安装到小型实例上的 EBS 卷的性能约为一半像。。一样好单个硬盘在我的笔记本电脑。
您可以通过将多个 EBS 卷划分为软件 RAID 配置来提高 EBS 性能
http://www.mysqlperformanceblog.com/2009/08/06/ec2ebs-single-and-raid-volumes-io-bencmark/
http://dodizzle.com/setting-up-software-raid-zero-over-8-volumes
将 MySQL 实例迁移到 Large 或更高版本可为您提供更多内存以及更好的 IO 性能。我会先尝试创建软件 RAID,然后考虑迁移到更大的实例。请注意,如果您调整好数据层,您实际上可以将 Wordpress 从 xlarge 实例降级到大型实例。