每天在生成某些报告时,mysql 进程都会占用 1 或 2 个核心(100%)。问题是整个服务器在此期间变得无响应。我无法使用 ssh,postfix 无法工作,apache 也无法工作。但是我可以 ping 服务器。Cronjobs 也可以工作,所以我目前每隔一分钟将 top 的输出保存到一个文件中。
有更多可用内核,内存使用率不是很高,所以我不知道为什么会发生这种情况。对于执行报告的应用程序,我无能为力,但我发现很奇怪,当 mysql 过载时,其他一切都停止工作。平均负载降至 1.5 左右。一切结束后,一切开始正常运转。我能做些什么吗?
物理服务器上的 Ubuntu 12.04 带有内核 3.13。
top - 21:51:02 up 82 days, 13:57, 8 users, load average: 1.19, 1.21, 1.15
Tasks: 367 total, 1 running, 364 sleeping, 0 stopped, 2 zombie
Cpu(s): 1.2%us, 0.9%sy, 1.4%ni, 95.7%id, 0.8%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16274920k total, 13190728k used, 3084192k free, 284272k buffers
Swap: 4095996k total, 1006148k used, 3089848k free, 4570996k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20794 mysql 20 0 3904m 893m 5260 S 100 5.6 2810:00 mysqld
19807 otrs 20 0 211m 46m 5560 S 75 0.3 0:00.39 otrs.PostMaster
14 root 20 0 0 0 0 S 2 0.0 20:49.52 rcuos/6
答案1
答案2
我建议你注意一点,你提到每隔一分钟将 tops 输出保存到一个文件中。为什么不直接使用 atop?你可以配置 atop 来记录每一秒的活动(注意这会占用大量磁盘空间)。然后你可以稍后使用 atop -r 查看生成的 atop 日志日志档案。这将让您更好地了解正在发生的事情。Atop 有一个很棒的手册页,因此只需阅读它,您就可以轻松查看您的服务器并更好地了解资源使用情况。
这里要注意的另一件事是,我们几乎不可能真正帮助您解决问题。MySQL 问题有时可能与配置问题有关,但也可能与您的数据库本身有关。如果您有很多碎片表,则可能会在某些过程中减慢速度。有许多因素可能导致 MySQL 实例出现问题,从而减慢速度。
如果你不熟悉 MySQL,我建议你下载并使用mysqltuner.pl。一个简单的 perl 脚本,用于获取 MySQL 实例的基本概述,您可以查看并进一步排除故障。
不要将 mysqltuner.pl 输出视为宗教
我的意思是不要只按照它说的做。使用它来更好地了解正在发生的事情并进一步帮助您进行 Google 搜索。