Linux: 关于blocked for more than 600 seconds的解决方法

news2024/11/29 4:38:40

背景

         在Centos 7的系统日志 /var/log/message中出现大量的 “blocked for more than 600 seconds”和“echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.” 的错误。

如下图所示:

问题原因

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

        这通常发生在内存很大的系统上。系统内存大,则缓冲区大,同步数据所需要的时间就越长,超时的概率就越大。

解决方法

        针对该问题,解决方法大致3种

方法一:缩小文件系统缓存大小

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

        文件系统缓存的大小是由内核参数vm.dirty_ratiovm.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 -w vm.dirty_ratio=10

# sysctl -w vm.dirty_background_ratio=5

# sysctl -p

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

#vim /etc/sysctl.conf

vm.dirty_background_ratio = 5

vm.dirty_ratio = 10

重启系统生效。

缩减文件系统缓存之后,上述问题成功解决。

方法二:取消120秒时间限制

        此方案是不让系统有那个120秒的时间限制。文件系统把数据从缓存转到外存慢点就慢点,应用程序对此延时不敏感。就是慢点就慢点,我等着。实际上操作系统是将这个变量设为长整形的最大值。

        PS:内核hung task检测机制由来

        我们知道进程等待IO时,经常处于D状态,即TASK_UNINTERRUPTIBLE状态,处于这种状态的进程不处理信号,所以kill不掉,如果进程长期处于D状态,那么肯定不正常,原因可能有二:

  1. IO路径上的硬件出问题了,比如硬盘坏了(只有少数情况会导致长期D,通常会返回错误);
  2. 内核自己出问题了。

        这种问题不好定位,而且一旦出现就通常不可恢复,kill不掉,通常只能重启恢复了。
        内核针对此种情况开发了一种hung task的检测机制,基本原理为:定时检测系统中处于D状态的进程,如果其处于D状态的时间超过了指定时间(默认120s,可以配置),则打印相关堆栈信息,也可以通过proc参数配置使其直接panic。

        如何修改或者取消120秒的时间限值呢。120秒的时间限值由内存参数kernel.hung_task_timeout_secs决定的。直接修改此内核参数的值就可。如果kernel.hung_task_timeout_secs的值设置为0,那就是把此种设置为长整型的最大值。

下面说一下修改调度器的流程。

(1)查看当前hung_task_timeout_secs值。

        在命令行中输入如下指令查询当前的值:

sysctl -a | grep hung_task_timeout_secs

(2)修改hung_task_timeout_secs值。

把hung_task_timeout_secs的值修改为0,在命令行中输入如下指令

./sbin/sysctl -w kernel.hung_task_timeout_secs=0

   使参数生效:

sysctl -p

取消120秒时间限值之后,上述问题成功解决

方法三:修改系统IO调度策略

        Linux的IO共有三种调度器:CFQ、noop、deadline。每个调度器各有优点。

  1. CFQ (Completely Fair Scheduler(完全公平调度器))(cfq):它是许多Linux 发行版的默认调度器;它将由进程提交的同步请求放到多个进程队列中,然后为每个队列分配时间片以访问磁盘。
  2. Noop调度器(noop):基于先入先出(FIFO)队列概念的Linux内核里最简单的I/O调度器。此调度程序最适合于SSD。
  3. 截止时间调度器(deadline):尝试保证请求的开始服务时间。

        Linux发行版的默认采用的是cfq调度器。此方案就是把cfq调度器修改为最简单的noop调度器。

下面说一下修改调度器的流程。

(1)查看当前采用的调度器

在命令行中输入如下指令查询当前调度器:

cat /sys/block/sda/queue/scheduler

(2)修改调度器

在命令行中输入如下指令:

echo noop >/sys/block/sda/queue/scheduler

调度器的修改是立即生效的,不必重启内核。

        修改完成后,让系统继续运行一段时间。上述问题依然存在。所以此方案对本文的案例不起作用。对于其他案例是否起作用需要自己按照上述方式测试才能得知。

 总结

        经过上述测试,对与本案例缩减文件系统缓冲大小和取消120秒时间限值均可以解决问题。但是取消120秒的时间限值会允许系统不可切换任务的出现。综合考虑决定采用方案1,即缩减文件系统的缓冲区大小。

参考

1、Linux Kernel Crash--hung_task_timeout_secs

2、How to fix hung_task_timeout_secs and blocked for more than 120 seconds problem

3、关于修改 sysctl.conf,如何使该文件在系统重启之后生效

4、一次内核hung task分析

5、文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这所211非常保护一志愿,录取最低分263分,多个专业上线即录取!

一、学校及专业介绍 云南大学(Yunnan University),简称云大(YNU),位于云南省昆明市,是教育部与云南省“以部为主、部省合建”的全国重点大学,国家“双一流”建设高校,云南…

EBU5476 Microprocessor System Design 知识点总结_4 Interrupt

Interrupts 比如我们程序的逻辑是按键按下的时候点亮小灯。第一种做法是 Polling 轮询,一直看:按键按下了吗?没有。按下了吗?没。按下了吗?…… 这样主要是效率低浪费CPU资源,如果为了节约资源轮询间隔大…

SpringBoot2.3集成Spring Security(一)

业务背景 首先一个项目最基础的部分一定是登录部分,那么有了登录肯定会有对应的权限校验、身份校验。 那么在没有使用Spring Security之前,大多数设计思路都是通过各种拦截器、监听器来控制用户的访问。但是这种方式,后续的维护会越来越复杂…

组合模式(十二)

请相信自己,请再次相信自己,请一定要相信自己 上一章简单介绍了装饰者模式(十一), 如果没有看过, 请观看上一章 一. 组合模式 引用 菜鸟教程里面的 组合 模式介绍: https://www.runoob.com/design-pattern/composite-pattern.html 组合模式&#xff0…

有多少运维配置防火墙忽略了长连接?

长连接的使用场景 当业务中客户端和服务器长时间无数据交互,空闲时间超过1800秒,会话会因超时被清除。后续客户端没有重新发起连接,直接发送控制报文时导致数据不通。常见于数据库连接。 1. 重点说明 以天为单位的会话超时需要开启长效会话比…

Android 进程间通信机制(六) 手写AIDL文件

阅读本篇文章前, 请先查看一下笔者之前的写的两篇博客文章: Android Service知识 和 Android AIDL使用 进程间通信涉及到客户端和服务端, 肯定有绑定服务的过程, 所以要阅读一下Android Service相关的知识, 跨进程通信的媒介aidl文件,我们也必须要了解怎么创建的,有什么规则…

【Jenkins】全网最详细的自动化测试

学习 Jenkins 自动化测试的系列文章 Robot Framework 概念Robot Framework 安装Pycharm Robot Framework 环境搭建Robot Framework 介绍Jenkins 自动化测试 1. Robot Framework 概念 Robot Framework是一个基于Python的,可扩展的关键字驱动的自动化测试框架。 它…

走进人工智能|GANs AI时代下的前卫艺术

前言: GANs的作用是以生成模型的形式学习数据分布,从而产生逼真的样本数据,可以应用于图像合成、风格转换、视频生成等领域。 文章目录 序言背景适用领域技术支持应用领域程序员如何学总结 序言 GANs(生成对抗网络)是…

测试为什么分白盒、黑盒、单元、集成测试?

一、为什么测试的概念这么多 一个软件项目就好比一部复杂的汽车,有很多零件,当每个零件生产完成后,就要测试零件是否存在质量问题。零件组成复杂的汽车后,我们还要测试汽车。比如著名的中保研,测试刹车,测…

运维圣经:挖矿木马应急响应指南

目录 挖矿木马简介 挖矿流程 挖矿木马应急响应 一. 隔离被感染主机 二. 确定挖矿进程 三. 挖矿木马清除 1、阻断矿池地址的连接 2、清除挖矿定时任务、启动项等 3、禁用可疑用户 4、定位挖矿木马文件的位置并删除 5、全盘杀毒、加固 挖矿木马简介 挖矿:…

喜报|瑞云科技荣获“年度汽车数字化营销供应商”奖

由iDigital China举办,中国国际贸易促进委员会汽车行业分会战略支持的ADMIC汽车数字化&营销创新峰会暨金璨奖颁奖盛典于2023年4月19日在上海圆满落幕。深圳市瑞云科技股份有限公司受邀参会,现场设有展位,为观众展示实时云渲染如何助力汽车…

实现阿里云域名的DDNS

实现阿里云域名的DDNS 目前现状与痛点 我们在使用ddns的时候会不会遇到这样的问题:路由器只支持指定的域名服务提供商或者是指定的域名,比如我的华为路由器就只支持花生壳: 我想看到这篇文章的小伙伴们应该都把域名注册到中国最大的域名注…

Nginx安装与配置

Nginx安装与配置 一、简介二、安装三、功能与配置3.1、正向代理3.2、反向代理3.3、负责均衡3.4、ip_hash3.5、轮询3.6、加权轮询 四、nginx安全相关配置五、常用命令 一、简介 Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 Ngin…

Windows11 安装 CUDA/cuDNN+Pytorch

一、准备工作: 查看torch版本:进入python交互环境: >>>import torch >>>torch.__version__ 查看cuda版本:CMD窗口 nvcc --version 如果版本不一致,需要卸载再重装。 二、安装 Windows 安装 CU…

【裸机开发】指定外设根时钟配置实验(三)—— 寄存器分析篇(PERCLK_CLK_ROOT、IPG_CLK_ROOT)

前面已经完成了 PLL1 和 8 路 PFD 的初始化,至于其他 PLL 路,等实际需要的时候再初始化也不迟。接下来我们就挑选几个具体的外设时钟进行配置。 假设我们要初始化下面两个根时钟PERCLK_CLK_ROOT、IPG_CLK_ROOT。(中途可能还涉及到根时钟 AHB…

【01】如何在电脑上使用wink一键高清短视频

如何在电脑上使用wink一键高清优化短视频画质 文章目录 如何在电脑上使用wink一键高清优化短视频画质1.软件简介1.1痛点1.2解决方案 2.实际操作2.1准备工作2.1.1下载雷电模拟器2.1.2下载wink 2.2.安装软件2.2.1安装雷电模拟器2.2.2安装wink2.2.2.1在雷电模拟器中安装wink2.2.2.…

【操作系统】计算机操作系统知识点总结

文章目录 前言一、操作系统的概念与发展二、操作系统的结构与功能1、操作系统的结构2、操作系统的功能 三、进程管理1、进程2、进程的创建3、进程管理的实现4、进程控制块 四、内存管理1、内存2、内存管理3、内存管理的实现 五、文件系统1、文件系统2、文件系统的主要任务3、文…

微服务springcloud 03.Eureka实现高可用

01.运行时候项目图存在两个item service,和两个Eureka注册中心 02.在已有的项目中扩展service服务数量(item service的数量变成两个) 第一步:配置item service的启动参数 启动参数的优先级要高于yml文件的优先级 具体参数是&#…

两万字深入浅出yolov5+deepsort实现目标跟踪,含完整代码, yolov,卡尔曼滤波估计,ReID目标重识别,匈牙利匹配KM算法匹配

目录 一:前言 二:跟踪部分: ReID结构​编辑 第一帧(生成track) 第二帧 更新先验的预测值 状态矩阵的初始化 对预测值进行更新(矫正): 匹配完成,进行矫正的更新&…

CSC改派+延期|影像学医生赴英国伦敦国王学院从事访学研究

因美国拒签,又临近派出截止期限。为避免出国指标作废,Q医生希望获得英国高校的邀请函,以申请CSC的改派并延期。我们为其落实了世界名校-英国伦敦国王学院访问学者职位,导师的研究方向属前沿热点,具有广阔的发展前景。Q…