我在一个WordPress网站上工作,每天获得大约100K页面浏览量。 我们使用Varnish作为caching层。 最近,我们遇到了一个问题,就是看起来随机的,MySQL的性能下降,导致我们的应用程序崩溃。 下面是New Relic昨天发生的停电事故的图表:
这在过去一周发生了两次。 该网站将运行良好的一个星期没有任何人接触生产服务器,然后这一切发生。 通常的响应时间是500毫秒左右,而这里峰值在60K毫秒(!)。 问题是通过停止apache,让数据库冷静下来,然后启动apache备份来解决的。
这并不是说更多的查询正在运行,或者一个特定的慢查询正在运行,并导致这个问题。 如果我采取New Relic报道的任何“缓慢的质疑”,并且运行它们,那么它们正在快速发展。 下面是同一时间框架内MySQL吞吐量的图表:
我检查了WordPress的挂钩和插件的统计数据,一切似乎是正常的。
我的问题是,我应该从哪里开始寻找? 哪些MySQL设置可能导致这个? 它甚至可能是一个MySQL问题,还是更可能是一个应用程序问题?
在进入具体的应用程序之前,我将从基础开始。 这不需要很长时间或很多努力。
从一些基本/通用服务器诊断的东西开始。 top / iostat / atop / htop / iotop / free / df / vmstat等等。 用你发现的东西回报。 我个人的偏好是很多东西(它也运行在后台,并logging像sysstat日志types)。 看内存,交换,磁盘IO,负载等…一切。
然后查看日志,如内核日志(或dmesg输出)和系统日志消息。
然后看看MySQL和你的Web服务,当所有其他都不能透露任何东西。
你有在一台机器的一切吗? 你确定你的服务器没有交换吗? 在问题中,如果你的工作负载是CPU /内存/ IO限制,你可以检查顶部和朋友吗?
你收集这些数据? 如果没有开始安装systat(sar和friends),那么你可以在问题发生后检查系统发生的情况。
然后在PHP和MySQL上启用缓慢的日志logging:
1) https://stackoverflow.com/questions/8560579/how-to-monitor-slow-php-processes
2) https://stackoverflow.com/questions/11606972/how-can-i-enable-slow-query-log-on-my-server
有了这些数据,您可以查明最终的问题,或者更好地了解发生的情况,并更好地监控或调整您的设置。
除了提到的其他工具之外,我build议使用'mytop'来查看mysql在减速时正在做什么。 这是非常顶级的,并显示查询/秒,以及积极运行查询的统计数据。