最近后台服务器周期地出现OnOutOfMemoryError,导致整个系统crash。遇到这样问题很郁闷,这很有可能是因为后台程序的内存泄漏引起的。但是要定位引起内存泄漏的代码比较困难。
还好后台运行的JVM的版本是1.5的,在抛出OnOutOfMemoryError的时候还告诉你是堆内存。为了解决这个问题,尝试了很多方法,最先是增大堆内存,通过调整JVM的启动参数如添加 -server -Xms1024m -Xmx1024m 将堆内存设置为1G,通过设置-verbosegc 让JVM输出垃圾回收的日志,但好像效果都不大,堆内存还是随着服务运行的时间不断增加,通过ulimit -s 2048改变Linux线程堆栈内存大小效果也不是很明显。
后来google了一下Java程序的内存分析工具,发现了JMemProfhttp://oss.metaparadigm.com/jmemprof/,用了一下效果不大好,而且好像其堆sun的JVM支持还不怎样:
- Currently runs really slow in Sun JDK due to inefficiencies in its profiler interface implementation. Please use IBM JDK if you want reasonable performance.
- Object arrays appear as unknown[] in IBM JDK due to a fault in its JVMPI interface. The class id is not set for object arrays.
- Many unknown objects appear when using Sun J2SDK. The class ids in the object alloc events don't correspond to a loaded class. I'm not sure yet what these objects are.
- Still some race conditions during shutdown.
启动JMemProf系统的性能急剧下降。最后干脆将JDK升级到1.6,将堆内存的使用dump出来分析,这个做法比较好,特别是在生产环境下,通过jmap -heap -dump:format=b,file=heap.bin pid将正在运行的JVM的heap内存dump出来,如果堆内存不是很大的话很快就可以做完,如果堆内存比较大的时候则比较郁闷了,要dump很久。将dump出来的heap.bin用jhat来分析,发现效果还不错,它能确定heap快照中某个类的对象实例有多少个,从而能很好地找到出现问题的程序,令外JDK1.6还有一个很有用的参数就是-XX:+HeapDumpOnOutOfMemoryError,它告诉vm在出现堆内存是将堆内存dump出来。这对生产环境中程序调试是很有用的。
分享到:
相关推荐
需要从JVM OutOfMemoryException(OME)中恢复JVM具有-XX:OnOutOfMemoryError选项,该选项可让您在脚本因OME而死时运行。 这是如何使用它的一个例子。 startTest.sh启动一个Java程序,该Java程序在内存不足的情况下...
`-XX:OnOutOfMemoryError=/opt/app/bin/stop.sh` 或 `-XX:OnOutOfMemoryError=/opt/app/bin/restart.sh` 指定OOM时的处理动作,例如停止服务或重启服务。 #### 五、垃圾收集器及调优 - **垃圾收集器介绍**:JVM提供...
5. **异常处理与错误**:了解JVM如何处理未捕获的异常和错误,以及如何利用`-XX:OnError`和`-XX:OnOutOfMemoryError`指定错误处理脚本。 6. **JVM安全与沙箱机制**:Java的沙箱模型保证了代码的安全性,理解其工作...
技术运维-机房巡检表及巡检说明
第四次算法分析与设计整理
图像处理项目实战
该资源为jaxlib-0.4.18-cp311-cp311-macosx_11_0_arm64.whl,欢迎下载使用哦!
搭建说明. 运行环境 php5.6 mysql5.6 扩展sg11 前置条件: 前后端分离,需要准备两个域名,一个后台域名,一个前端域名 后端源码修改(cs2.ijiuwu.com批量替换改为你的后端域名)数据库修改(cs3.ijiuwu.com批量替换为你的前端域名)1、创建后台站点,上传后台源码并解压到根目录2、创建前端站点,上传前端源码并解压到根目录 3、创建数据库上传并导入数据库文件 4、修改数据库信息: 后台:app/database.php 前端:application/database.php 前端站点设置 伪静态thinkphp 运行目录public 关闭防跨站 访问后台域名/admin.php进入后台管理 admin 123456 系统-》系统设置-》附件设置-》Web服务器URL 改为你的前端域名 系统-》清前台缓存 改为你的前端域名 点击刷新缓存
【毕业答辩】爆款黑板风教育文艺毕业论文答辩通用模板.pptx
1、文件内容:systemd-devel-219-78.el7_9.9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/systemd-devel-219-78.el7_9.9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
win32汇编环境,对 WM-MOUSEMOVE 消息的理解
车牌识别项目
UE项目开发过程中的一些快捷脚本
lab1的words.txt文件
python、yolo、pytorch
人工智能、大语言模型相关学习资料
图像处理项目实战
python、yolo、pytorch
车牌识别项目
该资源为jaxlib-0.4.18-cp312-cp312-macosx_10_14_x86_64.whl,欢迎下载使用哦!