我在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 bug有关。 荣誉nico-ekito 。 谢谢!
我能想到的唯一的事情就是以root用户身份来检查使用strace的mysqld在做什么。
strace -p 2959
通常,strace应该立即阻塞,并显示给select()的调用,因为mysqld应该等待连接。
这个电话应该是这样的:
select(SOCKETNO, [OTHER_FDs], NULL, NULL, NULL)
尤其重要的是第四个参数,即timeoutvalue。 如果为NULL,则意味着mysqld将会睡眠,直到有人连接。 如果不是NULL,则表示mysqld将等待指定的时间,然后执行一些维护工作。 一个非常小的timeval可能会解释CPU消耗。
我相信MySQL总是使用NULL(无限)超时。 这是有道理的,这是我现在能够达到的mysqld是如何表现。
但是,可能会有一些连接处理问题阻止select再次进入休眠状态。 检查这个行为是否在mysqld启动后立即出现,或者是否有人连接。
结束这个问题。 我的问题确实与闰秒的失败有关。