频繁oomkill引发的hungtask

2024-02-16 06:28
文章标签 引发 频繁 oomkill hungtask

本文主要是介绍频繁oomkill引发的hungtask,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1    故障背景    4
2    故障分析    4
3    总结分析    9
4    解决方案    9


1故障背景
2023.6.28-2024.2.5共有5台网关服务器hang死。hang死服务器清单如下:

2023.06.28   节点:172.23.32.5(CLB内4,解决方案:重新加入集群)  
2023.11.11   节点:172.23.32.193(eip,解决方案:自动恢复) 
2023.12.28   节点:172.22.32.5(CLB内4,解决方案:重新加入集群)
2024.01.02   节点:172.23.32.5(CLB内4,解决方案:重新加入集群)  
2024.2.5     节点:172.22.32.7(eip,解决方案:重新加入集群)
2故障分析
本次基于atop监控、vmcore日志、dmesg和message日志分析确认为boslog进程导致服务器hang死,具体分析如下:


1)通过atop监控可以看到在
11点53:22时 free:507.4M cache:9.4G 
11点53:32时 free:9.9G   cache:726.0M
atop里看基本没什么dirty page,free内存涨的时候,file cache释放出来,说明这个回收也不是回收dirty page,就是直接回收clean page
11点53:32内存回收的时候 flow进程D住了


2)通过vmcore日志发现当前处于收到一个信号的过程,随后 调用__getblk()等待可用的内存,目前由于 __getblk获取不到内存,于是不断地尝试调用 free_more_memory() 释放掉部分内存进行内存回收流程,卡到shrink_inactive_list。只有拿到足够内存,其对应的内核线程才能被唤醒。

3)查看 dmesg: flow进程oom的打印很多,kill掉的也是flow进程,内存堆栈里卡住的也是flow进程的内存回收的过程。

通过crash查看flow进程 属于cgroup

且flow与父进程状态也为睡眠状态(进程等待唤醒)详见下图:

补充:
1)查看部分机器,没出现hung住问题的系统都没有出现oom报错(系统内未安装flow进程,且系统中查看flow进程父进程为boslog进程)。

2)所有CLB类网关hang死服务器均安装boslog进程,没安装均为发生过hang死情况
3总结分析
Pod的flow进程在写IO时进getblk(),等待可用的内存,只有拿到足够内存,才能完成ext4_journal_stop()将t_updates 递减,其对应的内核Journal线程才能被唤醒,但是由于该pod的内存占用已经达到了其运行使用的上限,且无可回收的内存,导致进程触发了pod所在memory cgroup oom,但是由于引起oom的进程因为申请不到足够的内存无法从getblk()函数里退出到do_signal触发oom,kill收到信号杀死进程释放内存,最终引起了死环。


 

这篇关于频繁oomkill引发的hungtask的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713753

相关文章

一道算法题引发的动态内存管理的思考

在做PKU2762时,需要建邻接表。 于是按部就班写了下面一个插入边到邻接表中的函数: const int VMAX = 1010;typedef struct Graph{int vex;Graph* next;}Graph;Graph ArcGraph[VMAX];void insert(int u, int v){Graph* t = new Graph;Graph*

引发蛀牙、避免蛀牙食物大全

引发蛀牙、避免蛀牙食物大全 引发蛀牙的食物大全: 糖果 糖浆 糖果棒 巧克力 碳酸饮料 果汁 口香糖 蜂蜜 蛋糕 甜点 薯片 脆饼干 果酱 果冻 蜜饯 蜜饯果干 避免蛀牙的食物大全: 高纤维蔬菜 水果 坚果 种子 高钙乳制品 高蛋白质肉类 高蛋白质鱼类 绿茶 水 蔬菜汤 鸡汤 酸奶 酸奶制品 奶酪 红薯 土豆 面包和全麦面包 芝士

捉虫笔记(四)-- 空格引发的悬案

空格引发的悬案 1、描述现象: 在代码中有一段利用rmdir指令删除目录代码,但是有用户反馈一直删除失败,但是有没有看到错误的日志信息,正好有同事能复现,所以今天好好探究一番。 2、思考过程 很好奇的一点就是为什么有的环境就是正常。 首先想到2个问题: ①代码有没有执行。 ②假如执行,有没有错误。 关于这两个问题都有个难点,我该如何下断点: 2.1、分析代码是否执行 删除目录的

“苹果税”引发的苹果与腾讯、字节跳动之间的纷争与博弈

北京时间9月10日凌晨一点的Apple特别活动日渐临近,苹果这次将会带来iPhone16系列新品手机及其他硬件产品的更新,包括iPad、Apple Watch、AirPods等。从特别活动的宣传图和宣传标语“閃亮時刻”来看,Apple Intelligence将会是史上首次推出,无疑将会是iOS 18的重头戏和高光时刻。 不过就在9月2日,一则“微信可能不支持iPhone16”的

Address localhost:1099 is already in use:tomcat频繁重启端口占用问题

错误提示 Unable to open debugger port (127.0.0.1:58198): java.net.SocketException "Socket closed" Address localhost:1099 is already in use 端口被占用 报错原因 由于短时间内频繁运行tomcat服务器。 为了避免出现这一错误。可以点击刷新uodate

JVM避免频繁的GC

在编写代码时,完全避免垃圾收集(GC)是不可能的,因为Java(以及许多其他现代编程语言)的内存管理是基于自动垃圾收集的。然而,你可以通过一些最佳实践来减少GC的频率和开销,从而优化你的应用程序性能。以下是一些建议: 减少对象创建 尽可能重用对象,而不是每次需要时都创建新对象。 使用对象池来管理可重用对象的生命周期。 优化数据结构 选择合适的数据结构来存储数据,以减少内存占用和访问时间

Navicat导入时由分号引发的诡异问题

最近在将第三方提供的一个sql导入到自己的数据库的时候,(Event部分的脚本)总是提示错误: [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near

yarn ResourceManager Active频繁易主问题排查

文章目录 一、故障现象二、问题分析RM的HA机制分析ZK问题分析部分任务状态更新失败问题分析 三、解决和优化方案1. 调大 jute.maxbuffer 参数2. 修改yarn的源码3. 快速让集群恢复稳定的方法 四、总结 本周三公司的yarn集群出现故障,导致两台ResourceManger频繁易主,并且许多提交到集群的任务状态为 NEW_SAVING,无法执行。这里对此次的故

缓解webclient频繁报‘Connection prematurely closed BEFORE response’的问题

现象: 我在Java代码中使用org.springframework.web.reactive.function.client.WebClient进行网络请求,一开始会有比较多的偶发报错:Connection prematurely closed BEFORE response,网络连接莫名其妙就断了。 处理: 在网上找了挺多资料,就感觉https://stackoverflow.com/q

由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)

概述 从 WWDC 23 开始,苹果推出了全新的数据库框架 SwiftData。它借助于 Swift 语言简洁而富有表现力的特点,抛弃了以往数据库所有的额外配置文件,只靠纯代码描述就可以干脆利索的让数据库的创建和增删改查(CRUD)一气呵成。 在本系列博文中,我们将从一个简单而“诡异”的运行“事故”开始,有理有据的深入探寻一番 SwiftData 中耐人寻味的“那些事儿”。 在本