FullGC告警

查jstat -gc ip

 

异常代码:

Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
Sql: select * from eova_menu where code = ?
12-11 11:16:15[ERROR]/single_grid/list/hr_cost_bud_menu
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at com.jfinal.aop.Invocation.invoke(Invocation.java:87)

### 原因分析 内存泄漏警告通常意味着应用程序在运行过程中未能释放不再使用的对象,导致可用内存逐渐减少。对于Tomcat服务器而言,可能的原因包括但不限于: - 应用程序代码中的静态集合类(如`HashMap`, `ArrayList`等)持续增长而不清理。 - 使用了第三方库或框架存在已知的内存泄漏问题。 - Tomcat自身的某些组件配置不当。 针对特定情况提到的服务大量超时以及OOM Killed现象[^2],这表明不仅有内存泄漏的可能性,还可能存在其他因素影响着系统的稳定性和性能表现。例如,在Go项目中如果设置了过低的内存限制(如1GB),当业务逻辑频繁访问数据库并处理大数据集时很容易触发内存溢出错误;而在Java环境中,则需关注JVM参数设定是否合理,尤其是最大堆空间(-Xmx)、最小堆空间(-Xms),以及其他与垃圾回收机制密切关联的各项属性值[^3]。 ### 解决方案 #### 修改Catalina脚本增加调试选项 编辑位于E:\apache-tomcat-5.5.20\bin目录下的catalina.bat批处理文件,添加如下几项重要的JVM启动参数来帮助诊断和预防潜在的内存泄漏问题: ```batch set JAVA_OPTS=%JAVA_OPTS% -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\tomcat_heapdumps\ ``` 上述命令会在发生Out Of Memory Error(OOM)的时候自动保存heap dump文件至指定位置以便后续分析。 #### 合理调整JVM参数 基于当前硬件条件适当增大-Xmx, -Xms数值可以有效缓解短期压力,但长期来看仍要找出根本原因所在。另外建议开启GC日志记录功能用于监控每次Full GC前后的情况变化: ```bash set JAVA_OPTS=%JAVA_OPTS% "-XX:+PrintGCCause -XX:+UseConcMarkSweepGC ``` 同时考虑到NIO缓冲区可能导致额外开销,可考虑加入-Djdk.nio.maxCachedBufferSize=xxx 和 -XX:MaxDirectMemorySize 参数控制其上限范围[^4]: ```bash set JAVA_OPTS=%JAVA_OPTS% -Djdk.nio.maxCachedBufferSize=8m -XX:MaxDirectMemorySize=256m ``` #### 工具辅助排查 利用专业的工具来进行更深入细致地剖析也是必不可少的一环。比如IBM HeapAnalyzer 或者 Alibaba Cloud提供的Arthas都可以很好地胜任这项工作。通过这些工具能够直观看到哪些地方占用了过多资源从而进一步缩小怀疑区间直至最终定位具体源头[^5].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值