Mysql 在高负载时锁定 Linux 服务器

Mysql 在高负载时锁定 Linux 服务器

每天在生成某些报告时,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 搜索。

相关内容