我在 Amazon Linux AMI 上运行 MySQL。没有任何关联。没有连接,也没有运行其他使用 MySQL 的应用程序。它完全空闲,但是 top
报告 mysql 使用了 62% 的 CPU?为什么会发生这种情况,我该如何解决?
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 97.8%id, 0.0%wa, 0.0%hi, 0.0%si, 1.7%st
Mem: 1738504k total, 390708k used, 1347796k free, 56888k buffers
Swap: 917500k total, 0k used, 917500k free, 229804k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2959 mysql 20 0 466m 39m 5244 S 62.2 2.3 4:00.67 mysqld
1 root 20 0 19252 1504 1212 S 0.0 0.1 0:00.20 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
没有连接...
mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 5 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
更新: 我的问题肯定与 Lead Second 错误有关。感谢nico-ekito .谢谢!
最佳答案
我唯一能想到的就是以 root 用户身份使用 strace 检查 mysqld 到底在做什么:
strace -p 2959
通常情况下,strace 应该立即阻塞并显示对 select() 的调用,因为 mysqld 应该正在等待连接。
调用应该是这样的:
select(SOCKETNO, [OTHER_FDs], NULL, NULL, NULL)
特别重要的是第四个参数,它是一个超时timeval。如果为 NULL,则意味着 mysqld 将休眠直到有人连接。如果不为NULL,表示mysqld会等待指定的时间,然后做一些维护工作。非常小的时间间隔可能会解释 CPU 消耗。
我相信 MySQL 总是使用 NULL(无限)超时。这是有道理的,这就是我现在能够访问的 mysqlds 的行为方式。
但是,可能有一些连接处理问题会阻止 select 再次休眠。检查此行为是在 mysqld 启动后立即出现,还是在有人连接后出现。
关于mysql - EC2 Amazon Linux AMI MySQL CPU @ 62% 空闲时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282376/