过程 – “任务mysqld:xxx被阻止超过120秒”是什么意思?

我们正在解决MySQL问题,其中一些查询需要很长时间才能完成,我在/ var / log / messages中看到了很多这样的条目:

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

我特别想知道它对这个过程有何影响?

我在一个论坛中读到,这意味着当这个过程占用太多内存时会发生这种情况.

最佳答案
echo 0> / proc / sys / kernel / hung_task_timeout_secs只会使警告静音.除此之外它没有任何影响.任何高于零的值都将导致在任务被阻塞一段时间后发出此消息.

发出警告表示系统出现问题.根据我的经验,这意味着该进程在内核空间中被阻止至少120秒,这通常是因为该进程缺乏磁盘I / O.这可能是因为由于使用了太多的存储器而导致的大量交换,例如,如果您加载了大量的Web服务器,并且为系统配置了太多的apache子进程.在你的情况下,可能只是有太多的mysql进程竞争内存和数据IO.

如果底层存储系统性能不佳,例如,也可能发生这种情况.如果您有一个过载的SAN,或者磁盘上有软错误导致大量重试.每当任务必须等待很长时间才能完成其IO命令时,可能会发出这些警告.

转载注明原文:过程 – “任务mysqld:xxx被阻止超过120秒”是什么意思? - 代码日志