3

Amazon Linux AMI で MySQL を実行しています。それにつながるものは何もありません。接続はなく、MySQL を使用する他のアプリケーションも実行されていません。完全にアイドル状態ですがtop、mysql が CPU の 62% を使用していると報告されていますか? なぜこれが起こっているのですか?どうすれば修正できますか?

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

私が考えることができる唯一のことは、mysqldがユーザーrootとしてstraceを使用して実際に何をしているのかを調べることです。

 strace -p 2959

通常、mysqldは接続を待機している必要があるため、straceはすぐにブロックし、select()の呼び出しを表示する必要があります。

呼び出しは次のようになります。

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

特に重要なのは、タイムアウト時間値である4番目のパラメーターです。NULLの場合、誰かが接続するまでmysqldがスリープすることを意味します。NULLでない場合は、mysqldが指定された時間待機してから、メンテナンス作業を行うことを意味します。非常に短いタイムバルブは、CPU消費を説明するかもしれません。

MySQLは常にNULL(無限)タイムアウトを採用していると思います。それは理にかなっており、これが私が今到達できるmysqldsがどのように動作しているかです。

ただし、selectが再びスリープしないようにする接続処理の問題がある可能性があります。mysqldが起動するとすぐに、または誰かが接続した後に、この動作が表示されるかどうかを確認してください。

于 2012-07-01T13:50:32.197 に答える
0

この質問を締めくくります。私の問題は確かにうるう秒の大失敗に関連していました。

于 2012-07-16T17:46:20.153 に答える