Linux服务器卡死报错:INFO: task blocked for more than 120 seconds

发布时间:2025-12-10 21:03:03 浏览次数:1


服务器突然不正常,假死,无法连接ssh,端口都通,ip也通。进入kvm可以看到:

INFO:taskblockedformorethan120seconds

或者

info:taskkwoker/8:0:51blockedformorethan120secondsecho0?proc/sys/kernel/bung_task_timeout_secsdisablesthismessage

强制重启以后机器立即恢复,查看日志和监控,发现服务器负载很高,但是CPU利用率不高。出问题的时候IO超级低,服务器经常夯住,网站打不开。

2、问题原因:

关键信息是“hung_task_timeout_secs”,通过搜索,发现这是linux kernel的一个bug。摘抄一段:

BydefaultLinuxusesupto40%oftheavailablememoryforfilesystemcaching.AfterthismarkhasbeenreachedthefilesystemflushesalloutstandingdatatodiskcausingallfollowingIOsgoingsynchronous.Forflushingoutthisdatatodiskthisthereisatimelimitof120secondsbydefault.InthecaseheretheIOsubsystemisnotfastenoughtoflushthedatawithing120seconds.Thisespeciallyhappensonsystemswithalotofmemory.Theproblemissolvedinlaterkernels。

一般情况下,Linux会把可用内存的40%的空间作为文件系统的缓存cache。

默认情况下, Linux会最多使用40%的可用内存作为文件系统缓存。当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的IO请求都是同步的。

将缓存写入磁盘时,有一个默认120秒的超时时间。 出现上面的问题的原因是IO子系统的处理速度不够快,不能在120秒将缓存中的数据全部写入磁盘。

IO系统响应缓慢,导致越来越多的请求堆积,最终系统内存全部被占用,导致系统失去响应。

3、解决方法:

缩小文件系统缓存大小

降低缓存占内存的比例,比如由40%降到10%,这样的话需要同步到磁盘上的数据量会变小,IO写时间缩短,会相对比较平稳。

文件系统缓存的大小是由内核参数vm.dirty_ratio 和 vm.dirty_backgroud_ratio控制决定的。

vm.dirty_background_ratio指定当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存。

vm.dirty_ratio则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存),在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。

通常情况下,vm.dirty_ratio的值要大于vm.dirty_background_ratio的值。

根据应用程序情况,对vm.dirty_ratio,vm.dirty_background_ratio两个参数进行调优设置。 例如,推荐如下设置:

sysctl-wvm.dirty_ratio=10sysctl-wvm.dirty_background_ratio=5sysctl-p

如果系统永久生效,修改/etc/sysctl.conf文件。加入如下两行:

编辑#vi/etc/sysctl.confvm.dirty_background_ratio=5vm.dirty_ratio=10重启#sysctl-p

重启系统生效。问题解决。


service blocked
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477