私はいくつかのクエリを完了するのに長い時間がかかり、/var/log/messagesに次のエントリがたくさん表示されるMySQLの問題を解決しています。
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616327] INFO: task mysqld:4123 blocked for more than 120 seconds.
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616525] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jan 28 05:52:15 64455-alpha01 kernel: [2529273.616813] mysqld D 000000000000000d 0 4123 3142 0x00000080
どういう意味ですか? MySQLスレッドにどのような影響がありますか(4123はスレッドIDですか?)
今確認したときの値は次のとおりです/proc/sys/kernel/hung_task_timeout_secs
。
$ cat /proc/sys/kernel/hung_task_timeout_secs
120
具体的には、プロセスにどのような影響があるのか疑問に思います。
私は、フォーラムでプロセスがあまりにも多くのメモリを占有しているときに発生することを読みました。
ベストアンサー1
「ジョブの中断」は、カーネルがジョブを中断できない「D」状態にするバグです。この状態のジョブ/プロセスは終了できず、終了することもできませんkill -9
。
あなたの/var/log/messages
メッセージは4123
、ジョブ(明らかにmysqlデーモン)が120秒後にこの状態にあったことを意味します。これは、mysqlデーモンがリソースを待っていることを意味します。ほとんどの「D」状態はI / Oによって引き起こされます。
プロセスが開いたファイルハンドルに対して読み取りシステム呼び出しを要求すると、ファイルを読み取る必要があるたびに「D」状態に入ります。プロセスは「ブロック」されています。
この値は、/proc/sys/kernel/hung_task_timeout_secs
表示されるメッセージがログに表示される時期のみを定義します。メッセージに示すように、値をに設定するとメッセージを無効にできます0
。しかし、これは問題を解決しません。
次の2つの方法でのみ中断不可能な状態を解決できます。
- システムを再起動するか...
- プロセスにどのリソースが必要かを調べ、そのリソースが利用可能であることを確認してください。