3

我在 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 致敬。谢谢!

4

2 回答 2

1

我唯一能想到的就是以 root 用户身份使用 strace 检查 mysqld 到底在做什么:

 strace -p 2959

通常,strace 应该立即阻塞并显示对 select() 的调用,因为 mysqld 应该正在等待连接。

调用应该是这样的:

 select(SOCKETNO, [OTHER_FDs], NULL, NULL, NULL)

尤其重要的是第四个参数,它是一个超时时间。如果为 NULL,则表示 mysqld 将一直休眠,直到有人连接。如果不为NULL,则表示mysqld会等待指定的时间,然后做一些维护工作。一个非常小的时间间隔可以解释 CPU 消耗。

我相信 MySQL 总是使用 NULL(无限)超时。这是有道理的,这就是我现在能够达到的 mysqlds 的行为方式。

但是,可能有一些连接处理问题会阻止 select 再次休眠。检查此行为是在 mysqld 启动时出现,还是在有人连接后出现。

于 2012-07-01T13:50:32.197 回答
0

结束这个问题。我的问题确实与闰秒惨败有关。

于 2012-07-16T17:46:20.153 回答