k8s容器java应用频繁重启问题排查 OOM方向 - 教程

news/2025/11/15 11:37:55/文章来源:https://www.cnblogs.com/tlnshuju/p/19224790

k8s容器java应用频繁重启问题排查 OOM方向 - 教程

2025-11-15 11:33  tlnshuju  阅读(0)  评论(0)    收藏  举报

1.排查是否为OOM导致的服务重启

1.1检查k8s yaml

{"env":[{"name":"JAVA_OPTS","value":"-Xmx4260m-Xms4260m  -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=/quitJava.sh-XX:HeapDumpPath=/var/logs/dump/app.hprof -XX:+PrintGCDetails-XX:+PrintGCDateStamps -Xloggc:/var/logs/dump/gc-app.log-Drocketmq.client.logLevel=error"}

上述可以看到在发生oom时会在/var/logs/dump目录下生成app.hprof 的dump文件,但实际查看未发现产生该文件

2.排查是否为k8s探针导致的服务重启

2.1 k8s三种探针

2.1.1Liveness Probe(存活探针)

作用:检测容器是否“活着”。
目标:判断应用进程是否挂掉或进入无法恢复的状态。
触发动作:如果探针失败,Kubernetes 会 重启容器(Restart Container)。
使用场景:应用死锁(thread lock)、无限循环、内存溢出后无法自我恢复。

Liveness 保证应用不挂死,失败会强制重启容器。
示例:

livenessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 30  # 等待应用启动periodSeconds: 10        # 每 10 秒检测一次failureThreshold: 3      # 连续 3 次失败才重启

2.1.2 Readiness Probe(就绪探针)

作用:检测容器是否“准备好接收流量”。
目标:判断应用是否可以处理请求。
触发动作:
探针失败时,Kubernetes 会 把 Pod 从 Service 的 Endpoints 中移除,不再接收流量。
容器不会被重启(与 Liveness 不同)。
使用场景:应用启动慢、依赖初始化(DB、缓存)
高负载下暂时无法处理请求

Readiness 控制流量,确保 Pod 只在准备好时才接收请求。
示例:

readinessProbe:httpGet:path: /readyport: 8080initialDelaySeconds: 10periodSeconds: 5failureThreshold: 3

2.1.3 Startup Probe(启动探针)

作用:专门用于 慢启动的应用,防止 Liveness 探针过早重启。
目标:在应用完全启动之前,延迟 Liveness 的判断。
触发动作:如果启动探针失败,Kubernetes 会 重启容器
成功后,Liveness 和 Readiness 才开始工作
使用场景:
Java、Spring Boot、Tomcat 等启动时间长的应用
避免 Liveness 在启动期间误杀容器

Startup 保护容器启动,长时间慢启动不会被误判为死掉。

示例:

startupProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 0periodSeconds: 10failureThreshold: 30  # 等待 5 分钟

2.2 排查问题

根据2.1的内容,推断可能是Liveness Probe导致服务被kill重启,查看实际的探针脚本

livenessProbe:
exec:
command:
- /bin/bash
- '-c'
- >
r2=$(curl -i --max-time 10
'http://localhost:8099/health_check' | awk 'NR==1 {print}')
echo $r2
if [[ ! "$r2" =~ "200" ]]; then
echo "health未就绪"
exit 1
fi
failureThreshold: 5
initialDelaySeconds: 40
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 10

由上述脚本可知存活探针主要是检测/health_check 返回状态码是否为200来判断应用是否正常,如果非200则会退出容器进行重启。
为了检查实际的检测情况,我们对脚本进行了修改,再每次探针执行时都进行状态码的打印,最终修改为

livenessProbe:
exec:
command:
- /bin/bash
- '-c'
- >
r2=$(curl -i --max-time 10
'http://localhost:8099/health_check' | awk 'NR==1 {print}')
echo $r2
svc=app
date_hms=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "\n${date_hms} ===== $r2 =====" >> /var/logs/pid.txt
if [[ ! "$r2" =~ "200" ]]; then
echo "health未就绪"
exit 1
fi
failureThreshold: 5
initialDelaySeconds: 40
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 10

等待服务自动重启后,发现在重启期间存活探针调用的/health接口未出现非200的状态码,说明不是探针导致的服务重启

3.连接k8s集群查看pod实际启动情况

3.1 执行指令查看

3.1.1 连接k8s集群

进入阿里云容器服务 Kubernetes版ACK,拿到kubeConfig,
在这里插入图片描述
将kubeConfig复制到本地,并新建一个文件/Users/xxx/Utils/ecoflow-sit-cloud.yaml
在这里插入图片描述

3.1.2 查看pod信息

在这里插入图片描述

3.1.3 执行命令

第一步
export KUBECONFIG=/Users/xxx/Utils/ecoflow-sit-cloud.yaml
第二步 查看容器退出原因
kubectl describe pod app-deployment-67699fcf96-m255k -n default | grep -A5 "Last State"

在这里插入图片描述
发现最终还是oom导致的重启,但是为什么没有产生dump文件?

4.原因分析

4.1 未产生dump文件的原因

4.1.1 查看启动参数

{"env":[{"name":"JAVA_OPTS","value":"-Xmx4260m
-Xms4260m  -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions
-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=/quitJava.sh
-XX:HeapDumpPath=/var/logs/dump/app.hprof -XX:+PrintGCDetails
-XX:+PrintGCDateStamps -Xloggc:/var/logs/dump/gc-app.log
-Drocketmq.client.logLevel=error"}

发现在oom是会执行脚本quitJava.sh

pid=1 # ......1.........
kill -15 $pid
sleep 5s
kill -9 $pid

脚本首先会kill掉java进程,-15代表会等待后续的处理完成,但隔5秒后直接kill -9强制对进程进行删除

4.1.2 没有产生dump文件的原因

因为生产dump文件需要一定时间,但在oom时执行的脚本只等待5秒钟。所以实际情况是在5秒内未生成完dump文件,进程被kill掉了

5. 排查方式

5.1 修改oom执行脚本

pid=1 # ......1.........
date_hms=$(date '+%Y-%m-%d %H:%M:%S')
jpid=$(ps -ef | grep java | awk 'NR==2 {print $1}')
jstack ${jpid} > ${jstack_name}/var/logs/dump_jstack_${date_hms}.txt
kill -15 $pid
sleep 60s
kill -9 $pid

延时60秒进行kill -9 ,给dump日志足够的生成时间,并且增加jstack,在发生上述情况的时候可以记录相关线程的信息,方便后续排查oom问题

5.2 修改k8s pod yaml

在存活探针脚本中增加gc和jvm内存的相关日志,方便查看整体的内存变化趋势,用于排查当前的oom问题

livenessProbe:
exec:
command:
- /bin/bash
- '-c'
- >
r2=$(curl -i --max-time 10
'http://localhost:8099/health_check' | awk 'NR==1 {print}')
jpid=$(ps -ef | grep java | awk 'NR==2 {print $1}')
svc=app
date_hms=$(date '+%Y-%m-%d %H:%M:%S')
jstat_gc_name=/var/logs/${svc}_jstat_gc.txt
jstat_gcutil_name=/var/logs/${svc}_jstat_gcutil.txt
echo -e "\n${date_hms} ===== jstat -gc =====" >> $jstat_gc_name
echo -e "\n${date_hms} ===== jstat -gcutil =====" >> $jstat_gcutil_name
jstat -gc $(jps -l | grep /app.jar | awk '{print $1}') 1000 1 >> $jstat_gc_name
jstat -gcutil $(jps -l | grep /app.jar | awk '{print $1}') 1000 1 >> $jstat_gcutil_name
echo $r2
if [[ ! "$r2" =~ "200" ]]; then
echo "health未就绪"
exit 1
fi
failureThreshold: 5
initialDelaySeconds: 40
periodSeconds: 12
successThreshold: 1
timeoutSeconds: 10

最终gc和内存执行效果
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

2025年质量好的铁氟龙喷涂厂家推荐及选择参考

2025年质量好的铁氟龙喷涂厂家推荐及选择参考行业背景与市场趋势铁氟龙(PTFE)喷涂作为一种高性能表面处理技术,近年来在工业制造领域的应用持续扩大。根据《2024-2029年中国氟涂料行业市场调研与投资前景预测报告》…

2025年质量好的锅炉风机行业内知名厂家排行榜

2025年质量好的锅炉风机行业内知名厂家排行榜行业背景与市场趋势锅炉风机作为工业领域不可或缺的关键设备,其市场需求随着全球工业化的深入发展而持续增长。据中国风机行业协会最新统计数据显示,2024年我国锅炉风机市…

2025年热门的RJ45插座连接器母座行业内口碑厂家排行榜

2025年热门的RJ45插座连接器母座行业内口碑厂家排行榜行业背景与市场趋势随着全球数字化转型加速推进,RJ45插座连接器作为网络基础设施的核心组件,市场需求持续增长。据市场研究机构Grand View Research最新报告显示…

【高并发服务器】六、日志宏的实现 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年评价高的磁悬浮冷水机厂家最新推荐权威榜

2025年评价高的磁悬浮冷水机厂家最新推荐权威榜 行业背景与市场趋势 随着工业制造技术的不断升级,磁悬浮冷水机凭借高效节能、低噪音、长寿命等优势,逐渐成为温控设备市场的主流选择。据《2024年中国工业制冷设备市…

2025年白色珍珠棉卷材生产商权威推荐榜单:珍珠棉袋子/EPE珍珠棉板材/白色珍珠棉板材源头厂家精选

在当前工业包装领域,白色珍珠棉卷材因其优异的缓冲性能和环保特性,已成为精密仪器、电子设备、汽车配件等行业不可或缺的包装材料。据行业调研数据显示,珍珠棉卷材市场需求年均增长率保持在8%以上,在包装材料中的占…

2025年热门的防腐耐磨涂层厂家最新权威实力榜

2025年热门的防腐耐磨涂层厂家最新权威实力榜行业背景与市场趋势防腐耐磨涂层行业作为工业防护领域的重要组成部分,近年来随着制造业升级和环保要求提高,迎来了快速发展期。根据《2024-2029年中国防腐涂料行业市场调…

2025年口碑好的称重模块传感器品牌厂家排行榜

2025年口碑好的称重模块传感器品牌厂家排行榜行业背景与市场趋势称重模块传感器作为工业自动化、物流运输、食品医药等领域的关键测量设备,近年来随着智能制造和物联网技术的普及,市场需求持续增长。据《2024-2029年…

详细介绍:k8s(七)pod的配置资源管理

详细介绍:k8s(七)pod的配置资源管理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

2025年知名的一字阻尼铰链热门厂家推荐榜单

2025年知名的一字阻尼铰链热门厂家推荐榜单行业背景与市场趋势随着家居五金行业向智能化、人性化方向发展,一字阻尼铰链作为现代家具的核心配件,其市场需求持续增长。据《2024-2025中国家居五金行业白皮书》显示,全…

英语_阅读_ancient school_待读

What was school like in ancient times? 古代的学校是什么样的? In Greece, 2,500 years ago, students used to get up at dawn to go to school. 在2500年前的希腊,学生们通常在黎明时分起床去上学。 Classes be…

零售场景下的数智店商:解决盗损问题,化解隐性成本痛点

在零售行业,盗损问题始终是商家挥之不去的痛点。无论是顾客在生鲜区将进口水果藏入背包的偷盗行为,还是在化妆品区随意撕开试用装的违规拆包,亦或是电子产品区因意外碰撞导致商品损坏,这些隐性损失不仅侵蚀利润,还…

2025年11月北京高考辅导机构权威榜:五强对比与客观排行一览

2025年11月,北京高三学生已陆续进入期中诊断,距离次年高考不足二百天。家长群里“冲刺班”“押题营”刷屏,线下宣讲会一座难求,线上广告更是精准推送到家长手机。焦虑背后,是同一串疑问:时间紧、任务重,哪家辅导…

2025年轻奢营地帐篷直销厂家权威推荐榜单:度假营地帐篷/住宿营地帐篷/营地住宿帐篷源头厂家精选

随着精致露营消费升级,轻奢营地帐篷市场正迎来快速增长期。据2024年户外休闲产业数据显示,中国露营经济核心市场规模已突破580亿元,其中轻奢帐篷在营地装备采购中占比达23.5%,三年复合增长率达18.7%。 轻奢帐篷作为…

2025年靠谱的汇众汽配刹车盘行业内知名厂家排行榜

2025年靠谱的汇众汽配刹车盘行业内知名厂家排行榜行业背景与市场趋势随着中国汽车保有量的持续增长和汽车后市场的蓬勃发展,刹车盘作为汽车制动系统的核心部件,其市场需求呈现稳定上升态势。根据中国汽车工业协会最新…

2025年评价高的神州飞碟游乐设施厂家推荐及选择参考

2025年评价高的神州飞碟游乐设施厂家推荐及选择参考一、行业背景与市场趋势近年来,中国游乐设施行业呈现快速发展态势。根据中国游艺机游乐园协会数据,2023年中国大型游乐设施市场规模已突破200亿元,预计2025年将达…

2025年11月中国境外券商投行机构排行榜:跨境上市通道资源与牌照对比

“境外上市”四个字背后,往往是一家企业从初创到规模化的关键一跃。创始人通常面临三大痛点:一是境外监管规则复杂,稍有疏漏即被驳回;二是中介链条长,保荐、承销、法律、审计各自为政,沟通成本高;三是后续市值管…

2025年热门的地面瓷砖胶厂家推荐及选择建议

2025年热门的地面瓷砖胶厂家推荐及选择建议行业背景与市场趋势随着中国建筑行业的持续发展和装修标准的不断提高,地面瓷砖胶作为建筑装饰工程中的重要辅材,其市场需求呈现稳定增长态势。根据中国建筑材料联合会最新发…

2025年11月中国境外券商投行机构评价榜:顺安资本携四席真实数据对比

2025年11月,当企业计划赴纽约、香港或新加坡挂牌,却面对境外券商投行机构“牌照是否齐全、案例是否真实、服务能否覆盖全周期”三大疑问时,一份基于公开牌照库、监管公告与交易所披露案例的横向对比就显得格外必要。…

2025年评价高的三节缓冲同步隐藏轨厂家最新权威实力榜

2025年评价高的三节缓冲同步隐藏轨厂家最新权威实力榜行业背景与市场趋势随着家居五金行业向智能化、高端化方向发展,三节缓冲同步隐藏轨作为现代家具的核心配件,其市场需求持续增长。据《2024-2025中国家居五金行业…