Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 781|回复: 0

Linux系统出现hung_task_timeout_secs和blocked for more than 120 seconds的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-6-20 03:21:00 | 显示全部楼层 |阅读模式

     

    Linux系统出现系统没有响应。 在/var/log/message日志中出现大量的 “echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.” “blocked for more than 120 seconds”错误。

    问题原因:

    默认情况下, Linux会最多使用40%的可用内存作为文件系统缓存。当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的IO请求都是同步的。将缓存写入磁盘时,有一个默认120秒的超时时间。 出现上面的问题的原因是IO子系统的处理速度不够快,不能在120秒将缓存中的数据全部写入磁盘。IO系统响应缓慢,导致越来越多的请求堆积,最终系统内存全部被占用,导致系统失去响应。

    解决方法:

    根据应用程序情况,对vm.dirty_ratio,vm.dirty_background_ratio两个参数进行调优设置。 例如,推荐如下设置:
    # sysctl -w vm.dirty_ratio=10
    # sysctl -w vm.dirty_background_ratio=5
    # sysctl -p

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

    vm.dirty_background_ratio = 5
    vm.dirty_ratio = 10

    sysctl -p

     

    最近遇到过一个问题:

    apache服务器的负载飙升到700多,导致无法提供正常的http服务,此时查看系统日志时,发现:

    Jan  4 09:57:03 locasv107 kernel: INFO: task httpd:18463 blocked for more than 120 seconds.
    Jan  4 09:57:03 locasv107 kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

    诸如此类的报警日志。

    查询了资料后对于该参数的了解为后台对进行的任务由于超时而挂起
    从以上的报错信息也给出了简单的解决方案,就是禁止该120秒的超时:echo 0 > /proc/sys/kernel/hung_task_timeout_secs
    随后询问了主机工程师:给出方案是按照告警里的提示将该提醒disable

    后续询问后给出如下解释:
    This is a know bug. By default Linux uses up to 40% of the available memory for file system caching.
    After this mark has been reached the file system flushes all outstanding data to disk causing all following IOs going synchronous.
    For flushing out this data to disk this there is a time limit of 120 seconds by default.
    In the case here the IO subsystem is not fast enough to flush the data withing 120 seconds.
    This especially happens on systems with a lof of memory.

    The problem is solved in later kernels and there is not “fix” from Oracle.
    I fixed this by lowering the mark for flushing the cache from 40% to 10% by setting “vm.dirty_ratio=10″ in /etc/sysctl.conf.
    This setting does not influence overall database performance since you hopefully use Direct IO and bypass the file system cache completely.
    告知是linux会设置40%的可用内存用来做系统cache,当flush数据时这40%内存中的数据由于和IO同步问题导致超时(120s),所将40%减小到10%,避免超时。

     

    转载:https://www.cnblogs.com/wshenjin/p/7093505.html

    https://blog.csdn.net/yanggd1987/article/details/42388421

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-9 14:55 , Processed in 0.062723 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表