OOM内存泄漏问题定位及修复

张开发
2026/4/20 10:37:46 15 分钟阅读

分享文章

OOM内存泄漏问题定位及修复
文章目录问题描述解决方法情况一情况二总结问题描述OOMOut of Memory内存溢出以java程序为例服务日志出现如上标识说明出现OOM问题。可能场景一次性查询的数据太多都放到了list中解决分页定位业务代码内存资源耗尽没有释放比如高并发下不断创建线程不断使用jdbc connection又没有释放解决connection用完立马关闭池化思想限制只创建固定数量的满了就阻塞定位业务代码本身分配的堆内存资源不够jmap -heap查看堆信息进行相应调整解决方法情况一需要在服务部署前设置出现oom后能导出.hprof文件便于问题排查。参数设置-XX:HeapDumpOnOutOfMemoryError-XX:HeapDumpPath/data/logs/java_error.hprof/data/logs替换为实际的地址如果是docker部署注意要挂载到宿主机-v /你的宿主机路径/dumps:/docker路径/dumps部署查看日志出现如下日志说明完成dump查看宿主机上的文件地址注意存放.hprof文件的空间要足够大安装VisualVM或其他分析工具VisualVM下载地址https://visualvm.github.io/在VisualVM中载入.hprof文件ps载入过程会比较耗时可以看到类的实例数排行点击OutOfMemoryError Thread[view all]下拉找到标红的线程寻找第一行自己写的代码即为出问题的代码行情况二如果已部署的服务没有提前设置参数-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/data/logs/java_error.hprof。使用top命令找到占用最多的进程使用命令jmap -dump:formatb,filexxx.hprof 进程ID导出文件使用命令jmap -histo:live 进程ID可以查看最占内存的类然后再通过VisualVM等工具进行进一步分析总结一般出现oom后直接找问题是很难的需要在系统部署前就配置参数-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/data/logs/java_error.hprof使得JVM 在发生 OOM 时自动触发 Heap Dump拿到.hprof文件。通过VisualVM、Eclipse MAT (Memory Analyzer Tool)等专业工具去进行分析和定位。注意存放.hprof文件的空间要足够大。以上为个人学习分享如有问题欢迎指出

更多文章