K8s Pod频繁被杀,排查发现是资源限制的这个坑

服务部署在K8s上,运行一段时间后Pod就会重启。看日志没有异常,但Pod状态显示OOMKilled

一开始以为是代码内存泄漏,排查了一周,最后发现是K8s资源配置的问题。


问题现象

监控告警:Pod重启次数过多

kubectl get pods NAME READY STATUS RESTARTS AGE order-service-5d4f6c7b8-abc 1/1 Running 15 2d

2天重启了15次。

查看Pod详情

kubectl describe pod order-service-5d4f6c7b8-abc Last State: Terminated Reason: OOMKilled Exit Code: 137

OOMKilled+Exit Code 137= 被系统因为内存超限杀掉了。


排查过程

Step 1:先看资源配置

kubectl get pod order-service-5d4f6c7b8-abc -o yaml | grep -A 10 resources resources: limits: cpu: "2" memory: 2Gi requests: cpu: "1" memory: 1Gi

配置了limits.memory = 2Gi。

Step 2:看实际内存使用

kubectl top pod order-service-5d4f6c7b8-abc NAME CPU(cores) MEMORY(bytes) order-service-5d4f6c7b8-abc 500m 1950Mi

内存用了1950Mi,接近2Gi的限制了。

Step 3:进容器看详情

kubectl exec -it order-service-5d4f6c7b8-abc -- /bin/sh # 查看容器看到的内存限制 cat /sys/fs/cgroup/memory/memory.limit_in_bytes # 2147483648 (2GB) # 查看当前使用 cat /sys/fs/cgroup/memory/memory.usage_in_bytes # 1900000000+ (约1.9GB)

确实快到上限了。

Step 4:分析JVM内存

这是个Java服务,看看JVM配置:

# 查看JVM参数 ps aux | grep java java -Xms1g -Xmx2g -jar app.jar

问题来了:JVM的-Xmx设成了2G,和容器limits一样大!


问题根因

Java在容器中的内存计算

容器的内存限制 ≠ 只给JVM用的内存

容器总内存 = JVM堆内存 + JVM非堆内存 + 操作系统开销 具体来说: - 堆内存(-Xmx) - Metaspace - 线程栈(每个线程1MB左右) - 直接内存(DirectByteBuffer) - JNI - GC开销 - 容器内其他进程

如果-Xmx=2G,container limit也是2G,那堆刚满的时候,加上其他内存,总量就超过2G了,触发OOMKilled。

数据验证

我们服务的实际内存组成:

组成部分大小说明
堆内存(实际使用)1.5G没到-Xmx上限
Metaspace150M类加载
线程栈200M约200个线程
直接内存100MNIO使用
其他100MGC、JNI等
合计约2G超过limit

堆内存还没满,但总内存已经超限了。


解决方案

方案一:调整limits(推荐)

resources: limits: memory: 3Gi # 给足够的余量 requests: memory: 2Gi

一般建议:limits.memory = Xmx + 500M ~ 1G

方案二:调整JVM参数

# 按容器限制的75%设置堆内存 java -Xms1g -Xmx1536m -jar app.jar # 或者用容器感知参数(JDK 8u191+) java -XX:MaxRAMPercentage=75.0 -jar app.jar

MaxRAMPercentage会自动读取容器的内存限制,按比例设置堆大小。

方案三:限制非堆内存

java \ -Xms1g -Xmx1536m \ -XX:MaxMetaspaceSize=256m \ -XX:MaxDirectMemorySize=256m \ -Xss512k \ -jar app.jar
  • -XX:MaxMetaspaceSize:限制Metaspace
  • -XX:MaxDirectMemorySize:限制直接内存
  • -Xss:减小线程栈大小

最终配置

# deployment.yaml resources: limits: cpu: "2" memory: 2560Mi # 2.5G requests: cpu: "1" memory: 2Gi # JVM参数 java \ -XX:MaxRAMPercentage=75.0 \ -XX:InitialRAMPercentage=50.0 \ -XX:MaxMetaspaceSize=256m \ -jar app.jar

改完后再也没重启过。


几个相关的坑

坑1:requests和limits差太多

# 不推荐 requests: memory: 512Mi limits: memory: 4Gi

requests太小会被调度到资源紧张的节点,然后因为实际用量超过节点剩余资源被OOM。

建议:requests设成实际使用量,limits设成峰值+余量。

坑2:不设limits

# 危险 resources: requests: memory: 1Gi # 没有limits

不设limits意味着可以无限使用,可能把节点撑爆,影响其他Pod。

坑3:老版本JDK不认容器限制

JDK 8u131之前的版本不认识cgroup的内存限制,会读取物理机的内存。

解决:升级到JDK 8u191+或JDK 11+,或手动设置-Xmx。


监控和告警

查看Pod历史事件

kubectl describe pod <pod-name> | grep -A 20 Events

查看节点内存压力

kubectl describe node <node-name> | grep -A 5 Conditions

Prometheus监控

# 告警规则 - alert: PodOOMKilled expr: kube_pod_container_status_last_terminated_reason{reason="OOMKilled"} == 1 for: 0m labels: severity: warning annotations: summary: "Pod {{ $labels.pod }} OOMKilled"

远程排查

线上K8s集群通常在内网,出问题需要VPN或跳板机。

我用组网工具提前把笔记本和跳板机组好,在外面也能快速kubectl连上去看情况。比每次找运维开VPN快多了。


排查命令总结

# 查看Pod状态和重启次数 kubectl get pods # 查看重启原因 kubectl describe pod <pod-name> # 查看实时资源使用 kubectl top pod <pod-name> # 进入容器看cgroup限制 kubectl exec -it <pod-name> -- cat /sys/fs/cgroup/memory/memory.limit_in_bytes # 查看JVM内存(Java容器) kubectl exec -it <pod-name> -- jcmd 1 VM.native_memory summary # 查看OOMKilled事件 kubectl get events --field-selector reason=OOMKilling

总结

场景配置建议
Java服务limits = Xmx + 500M~1G
推荐做法用MaxRAMPercentage=75%
requests设成实际使用量
limits设成峰值+余量

K8s的OOMKilled不一定是代码内存泄漏,很可能是资源配置不合理。先看limits和JVM参数是否匹配。

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

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

相关文章

深度测评8个AI论文写作软件,本科生搞定毕业论文不求人!

深度测评8个AI论文写作软件&#xff0c;本科生搞定毕业论文不求人&#xff01; AI 工具如何改变论文写作的未来 随着人工智能技术的不断发展&#xff0c;AI 工具在学术写作中的应用越来越广泛。对于本科生而言&#xff0c;撰写毕业论文是一项既重要又复杂的任务&#xff0c;而借…

Z-Image-Turbo灾难恢复:快速重建你的AI绘画服务环境

Z-Image-Turbo灾难恢复&#xff1a;快速重建你的AI绘画服务环境 作为一名AI绘画服务开发者&#xff0c;最担心的莫过于服务器突然宕机导致服务中断。Z-Image-Turbo作为当前热门的文生图模型&#xff0c;其依赖复杂、环境配置繁琐&#xff0c;一旦出现故障往往需要数小时甚至更长…

论文降AI率实用指南:真实案例解析【嘎嘎降AI】与【比话降AI】助力通过知网AIGC检测

摘要 随着高校AIGC检测技术不断升级&#xff0c;毕业生和研究者越来越关注论文降AI率的问题。本文结合真实体验&#xff0c;围绕“论文降AI率”关键词&#xff0c;深入分享论文查AI率面临的痛点&#xff0c;介绍两款主流降AI工具【嘎嘎降AI】与【比话降AI】的使用效果&#xf…

论文重复率太高怎么办?真实降重经验分享及【嘎嘎降AI】与【比话降AI】使用解析

"## 摘要 随着高校查重系统的不断升级&#xff0c;论文重复率尤其是AI生成内容的比例逐渐成为毕业生关注的重点。本文以“论文重复率太高怎么办”为核心&#xff0c;结合真实操作体验&#xff0c;深入探讨查AI率、降AI的难点&#xff0c;并推荐两款被诸多高校学生认可的…

2026年Java后端开发最全面试攻略

前言 时间过的真快&#xff0c;转眼就2026了&#xff0c;现在面临年底裁员&#xff0c;公司跳槽&#xff0c;不论是校招还是社招都避免不了各种面试&#xff0c;如何去准备面试就变得格外重要了&#xff0c;相信一些小伙伴也在为自己的技术&#xff0c;薪资&#xff0c;发展做…

移动办公新可能:随时随地访问你的Z-Image-Turbo云端创作站

移动办公新可能&#xff1a;随时随地访问你的Z-Image-Turbo云端创作站 作为一名经常出差的设计师&#xff0c;你是否遇到过这样的困扰&#xff1a;想在不同设备上使用AI绘画工具&#xff0c;却受限于本地部署的复杂环境和硬件要求&#xff1f;Z-Image-Turbo云端创作站正是为解决…

论文降AI率实用指南:真实体验分享【嘎嘎降AI】与【比话降AI】助力知网AIGC检测

摘要 随着高校AI辅助写作检测日益严格&#xff0c;论文AI率高成为许多同学头疼的问题。本文基于真实操作经验&#xff0c;围绕关键词“论文降AI率”&#xff0c;结合查AI率痛点&#xff0c;介绍两款主流降AI工具【嘎嘎降AI】和【比话降AI】&#xff0c;通过数据和场景分析&…

电脑丢失或是被盗以后如何保护机密资料不泄露?—SDC沙箱全盘加密方案

一、需求背景&#xff1a;当前数字化转型加速推进&#xff0c;全球数据量呈现爆发式增长&#xff0c;数据资产已成为企业和个人的核心价值载体。然而&#xff0c;伴随而来的是日益严峻的数据安全挑战&#xff1a;据Verizon《2023年数据泄露调查报告》显示&#xff0c;涉及物理设…

【TJU】信息检索与分析课程笔记和练习(8)(9)发现系统和全文获取、专利与知识产权基本知识

【TJU】信息检索与分析课程笔记和练习&#xff08;8&#xff09;&#xff08;9&#xff09;发现系统和全文获取、专利与知识产权基本知识 一、前言二、课程笔记2.1 发现系统2.2 全文获取2.3 专利及其起源2.4 专利基础知识2.5 专利权的获取2.6 专利与知识产权 三、课后练习写在最…

阿里通义Z-Image-Turbo风格迁移:快速搭建实验环境

阿里通义Z-Image-Turbo风格迁移&#xff1a;快速搭建实验环境 为什么选择阿里通义Z-Image-Turbo风格迁移&#xff1f; 作为一名数字艺术家&#xff0c;你是否经常遇到这样的困扰&#xff1a;想要尝试不同的艺术风格效果&#xff0c;但每次调整模型参数都需要重新配置环境&#…

微信小程序字体大小在安卓手机上有限制

即便你设置的字体很小&#xff0c;但是有最小限制&#xff0c;就像浏览器有最小字体限制一样&#xff0c;官方链接&#xff1a;https://developers.weixin.qq.com/community/develop/doc/000e8e8c7f03a01dedad71a625a400?highLine%25E6%259C%2580%25E5%25B0%258F%25E5%25AD%25…

论文修改降重实战经验:如何有效降低论文AI率通过知网AIGC检测?

随着高校AIGC检测的不断升级&#xff0c;论文AI率偏高成为困扰学生的主要问题。本文从真实使用角度出发&#xff0c;围绕“论文修改降重”关键词&#xff0c;详细阐述查AI率和降AI的关键环节&#xff0c;聚焦两款主流降重工具【嘎嘎降AI】与【比话降AI】的实际操作体验&#xf…

懒人必备!阿里通义Z-Image-Turbo WebUI十分钟快速上手指南

懒人必备&#xff01;阿里通义Z-Image-Turbo WebUI十分钟快速上手指南 作为一名UI设计师&#xff0c;你是否也像Lisa一样&#xff0c;既想体验AI绘画工具提升工作效率&#xff0c;又被复杂的Python依赖安装劝退&#xff1f;阿里通义Z-Image-Turbo WebUI正是为这类场景设计的&qu…

智能包装设计:基于Z-Image-Turbo的快速打样系统

智能包装设计&#xff1a;基于Z-Image-Turbo的快速打样系统实战指南 在快消品行业&#xff0c;每个季度需要设计数百种包装变体是常态。传统设计流程从需求沟通到最终成品往往需要数周时间&#xff0c;严重拖慢市场响应速度。今天我要分享的Z-Image-Turbo快速打样系统&#xff…

基于python+mysql的宠物领养网站系统源码+运行+计算机科学与技术

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。这是一个前后端分离的项目&#xff0c;需要同学们学习django技术和vue技术。大学生必须学习的技术。 整个平台包括前台和后台两个部分。 前台功能包括&#x…

如何给论文降重?真实案例分享【嘎嘎降AI】与【比话降AI】助你科学降AI率通过知网检测

"## 摘要 随着高校加强对论文中AI生成内容的监管&#xff0c;论文AI率检测成了毕业和发表的关键难题。本文结合“论文降重”与“降AI率”关键词&#xff0c;分享自己在查AI率与降AI过程中的真实心得&#xff0c;重点介绍两款专业降AI工具——【嘎嘎降AI】和【比话降AI】…

【车牌识别】雾霾天气车牌识别【含GUI Matlab源码 14870期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab领域博客之家&#x1f49e;&…

智能识别之建筑物混凝土缺陷识别 混凝土裂缝识别 栏杆腐蚀铁锈检测 桥梁孔洞识别 材料表面缺陷识别与质检场景 CNN深度学习第10367期

数据集说明数据集核心信息项目详情类别数量及中文名称6 类&#xff1a;材料沉积、腐蚀、裂纹、发现裂纹、发现间隙、孔洞数据数量4000 条&#xff08;图像数据&#xff09;数据集格式种类YOLO 格式最重要应用价值支撑工业缺陷检测领域计算机视觉模型训练&#xff0c;适用于材料…

沃尔玛买家号养号指南:从手动操作到AI一键养号

随着沃尔玛跨境电商的高速发展&#xff0c;买家号的稳定性已经成为卖家获取订单和提升转化的核心因素。很多卖家在初期尝试手动养号&#xff0c;登录、浏览、收藏、加购&#xff0c;甚至模拟下单&#xff0c;每天花费大量时间操作多个账号。然而&#xff0c;手动操作不仅耗时&a…

直播电商选对BGM,提升观看与转化:实用音乐素材指南

做直播电商久了就发现&#xff0c;背景音乐真不是随便选的——选对了能带动观众情绪&#xff0c;让产品亮点更突出&#xff0c;甚至能悄悄提升转化&#xff1b;选得不好反而会分散注意力&#xff0c;影响观看体验。不过有个关键前提&#xff0c;商用场景一定要用合规的音乐&…