记录一次典型oom的处理过程

背景

有同学反馈收到应用RT的报警,其中的流量都来自于网关集群中的一台机器。因为负责网关,就上去看了下并进行排查。整体是一个比较明显的oom,这里只是记录下排查过程,老司机可以略过了。

初步现象

常规步骤,使用top 和jstat -gcutil 能直观的看到在拼命full gc。推测是出现了oom。

初步排查

一开始是用 jmap -histo:live [pid] >a.log 导出当前内存对象,为什么没有直接用jmap -dump:live 也是想偷懒,因为-dump 生成的文件太大,我们的服务器又跑在k8s上面,要拿回本地需要通过ftp 中转,想着能省就省。结果发现这个给后面埋了个大坑。

基于上面的结果,一度怀疑是sentinel 引起的问题。特别是对比了正常的机器上的内存分布

在上面浪费了大量时间,后面回过头看其实ConcurrentHashMap 占比这么高说明是缓存管理出现了问题。

进一步排查

老老实实用 jmap -dump:live,format=b,file=xxx.xxx [pid] 打印出详细的内存堆栈,拿到本地后用 IBM HeapAnalyzer(比较好用) 或者MAT 打开分析。

从上面比较直观看到出现oom的类。这里只是看到单个的类比较大,从源码上看:

会发现有块缓存没有设置长度和失效时间,这个很可能是导致oom的原因。

相关推荐
趁月色小酌***7 分钟前
JAVA 知识点总结5
java·开发语言·python
冰冰菜的扣jio11 分钟前
InnoDB对于MVCC的实现
java·数据库·sql
Macbethad11 分钟前
SpringMVC RESTful API开发技术报告
java·spring boot·后端
05大叔11 分钟前
SpringMVCDay01
java·开发语言
AC赳赳老秦13 分钟前
农业智能化:DeepSeek赋能土壤与气象数据分析,精准预测病虫害,守护丰收希望
java·前端·mongodb·elasticsearch·html·memcache·deepseek
纟 冬16 分钟前
Flutter & OpenHarmony 运动App运动提醒组件开发
android·java·flutter
雪花desu22 分钟前
【Hot100-Java简单】:两数之和 (Two Sum) —— 从暴力枚举到哈希表的思维跃迁
java·数据结构·算法·leetcode·哈希表
leaves falling24 分钟前
c语言打印闰年
java·c语言·算法
我的xiaodoujiao30 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 37--测试报告 Allure 前置步骤-配置安装 JDK 详细图文教程
java·开发语言·学习·测试工具
老华带你飞31 分钟前
婚纱摄影网站|基于java + vue婚纱摄影网站系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot