本文目录一览:
生产问题(一)K8S内存溢出
1、在Kubernetes(K8s)中,当Pod发生OOM(Out of Memory,内存溢出)被杀掉时,Pod的名称本身不会因为OOM事件而发生变化。
2、作者:林小铂 在生产环境中,Flink 通常部署在 YARN 或 k8s 等资源管理系统之上,以容器化(YARN 容器或 docker 等容器)形式运行。资源管理系统的严格限制与 JVM 复杂且可控性较弱的内存模型结合,容易导致 Flink 进程因资源使用超标被系统杀死。
3、适用场景:基于K8s的微服务开发调试。避免复杂的环境配置与网络代理设置。1 数据处理工具:EasyExcel官网:https://github.com/alibaba/easyexcel核心功能:重写POI解析逻辑,大幅降低Excel处理内存占用(3M文件仅需KB级内存)。支持03/07版Excel,避免内存溢出。适用场景:大数据量Excel的导入导出。
4、解决方法:修改JVM启动参数,检查错误日志。对代码进分析,查找可能发生内存溢出的位置。内存溢出的常见原因:可能是内存加载的数据量过大导致,比如一次提取过多的数据。可能是第三方软件bug导致,可以卸载软件。可能是启动参数内存值设定的过小,需要重新设置。可能是代码存在死循环。
5、内存溢出是指程序在申请内存时,没有足够的内存空间供其使用。内存溢出的解决方案:第一步,修改JVM启动参数,直接增加内存。第二步,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。
6、历史问题 常见坑:梳理系统过往的故障案例(如数据库连接泄漏、内存溢出)。
问题来了:4GB物理内存的机器上申请8G内存能成功吗?
1、物理内存分配机制内存OOM故障案例:仅申请不使用内存OOM故障案例:操作系统仅分配虚拟内存内存OOM故障案例,不占用物理内存,申请会成功。申请并使用:访问虚拟内存时触发缺页中断,操作系统分配物理内存。若物理内存不足(如4GB机器需分配8GB),会尝试回收内存,最终可能触发OOM。验证案例:在2GB物理内存内存OOM故障案例的64位机器上,程序可成功申请4GB虚拟内存(未使用时VSZ=4GB,RSS≈0)。
2、因此,在64位操作系统、4GB物理内存内存OOM故障案例的机器上,申请8GB内存是可以成功的,因为这只是申请虚拟内存,并不会立即分配物理内存。
3、申请8GB虚拟内存会成功,因操作系统仅分配虚拟地址空间,不立即占用物理内存。
有趣的无限缓存OOM现象
OpenVLA项目中的内存问题并非传统内存泄漏,而是RLDS数据加载器设计特性导致的内存持续增长现象。该问题主要表现为训练过程中内存占用随时间持续上升,最终可能引发内存耗尽(OOM)错误,尤其在长时间任务中更为显著。
难发现的小概率Bug:通过日志与场景复现定位必现路径Bug描述:在某金融交易系统的压力测试中,偶发出现“交易记录丢失”现象,但复现概率不足0.1%,且无明确触发条件。解决过程:日志分析:通过全链路日志追踪,发现丢失记录的请求均伴随短暂的数据库连接池耗尽警告,但常规压力测试未覆盖该场景。
内存队列未设置容量限制,导致数据无限堆积,最终触发OOM。
未显式管理的风险若未配置回收策略或未释放强引用,Map本地缓存可能长期占用内存:普通HashMap:强引用未释放时,缓存会一直存在,可能导致OOM。WeakHashMap:虽能自动清理无强引用的键,但若值被强引用持有,仍可能泄漏。Guava Cache:未设置过期时间或容量限制时,缓存可能无限增长。
OOM(内存溢出)原因:内存泄漏(如未释放资源、缓存无限增长)。分配过大对象(如单次申请超大数组)。panic&recover:panic:导致程序崩溃的严重错误(如数组越界、空指针引用)。recover:在defer函数中捕获panic,实现优雅降级。
标签: 内存OOM故障案例

还木有评论哦,快来抢沙发吧~