博客
关于我
GC overhead limit exceeded
阅读量:648 次
发布时间:2019-03-15

本文共 1388 字,大约阅读时间需要 4 分钟。

GC Overhead Limit Exceeded 错误的解决方法及 JVM 调优分析

GC Overhead Limit Exceeded 错误通常表明 JDK 的垃圾回收机制在长时间运行中占用了过多 CPU 资源。这种情况下,JVM 可能会因为垃圾回收част surrogate 吞吐量大幅下降而变得非常缓慢。以下是解决该问题的关键步骤和方法:

1. 增加 JVM 的堆内存

首先,增加 JVM 的堆内存可以为了减少内存压力而为运行时数据留出更多空间。具体操作如下:

  • 在启动 JVM 时,通过 -Xms-Xmx 参数指定初始内存和最大内存。

  • 注意:两者应设置为相同值,以避免新生成对象占用过多内存。

    示例:

    java -Xms100m -Xmx100m -jar yourApplication.jar

2. 关闭 GC Overhead Limit

为了完全关闭 GC Overhead Limit,可以通过VM参数 -XX:-UseGCOverheadLimit 进行设置:

java -XX:-UseGCOverheadLimit -Xms128m -Xmx128m -jar yourApplication.jar

3. 分析堆栈和内存状态

添加足够的内存后,接下来进行深入的性能分析。以下是一些常用的 JVM 工具:

a. 查看 JVM 运行状态

使用 jps 工具可以快速查找当前运行的 JVM 进程ID:

jps -ml

expect 将获取到的 PID 作为后续分析的依据。

b. 查看线程栈状态

使用 jstack 工具可以打印当前 JVM 的线程栈信息:

jstack -l pid

通过查看线程栈,可以了解是否存在内存泄漏或过多的异步操作对性能的影响。

c. 分析类的加载和内存占用

使用 jmap 工具可以查看堆内存的详细使用情况,包括类的数量和对内存的占用:

jmap -histo pid | more

通过分析可知,内存中存在较多的ively-circulated对象可能导致垃圾回收压力增大。

4. 导出内存.dump 文件

如果上述分析无法充分发现问题,可以通过生成内存dump文件进行进一步调查:

jmap -dump:format=b,file=dump.hprof pid

文件可能较大,建议确保执行时目标目录有足够的磁盘空间。此外,使用MAT(Memory Analysis Tool)来分析生成的.dump 文件,可以更直观地识别内存泄漏和性能瓶颈。

5. 相关问题的其他解决方案

如果无法获取内存dump文件,可以通过检查内存中现有对象的数量和内存布局来进行初步分析:

a. 检查内存使用情况

使用 jmap 工具可以查看当前堆内存的使用情况:

jmap -heap pid

b. 分析内存碎片

有时,内存碎片问题可能会导致实际可用内存远低于实际内存限制。查看内存碎片情况可以帮助确认内存是否被有效利用:

vmstat -m pid

通过分析内存分配情况,可以发现是否存在内存碎片过多的问题。

结语

通过上述方法,可以快速定位和解决 JVMgc压力过大的问题。从内存分配策略到详细的性能分析,每一步都至关重要。关键是在实践中结合具体情况,灵活调整 JVM 参数,并定期进行内存分析,以确保 JVM 和应用的健康运行。

转载地址:http://nicmz.baihongyu.com/

你可能感兴趣的文章
修改ng-zorro中table对齐及宽度等细节
查看>>
输出对象的值——踩坑
查看>>
angular2项目里使用排他思想
查看>>
折线图上放面积并隐藏XY轴的线
查看>>
zabbix之自动发现
查看>>
Experience of tecent interview
查看>>
python实验--太理二
查看>>
failed to push some refs to git
查看>>
vue基础学习01
查看>>
控制流程获取1-100以内的质数质数
查看>>
在苹果Mac上如何更改AirDrop名称?
查看>>
1110 Complete Binary Tree (25 point(s))
查看>>
310【毕设课设】微机原理-基于8086CPU校园标语牌系统仿真设计
查看>>
541【毕设课设】基于单片机电阻电感电容RLC测量仪系统
查看>>
568【毕设课设】基于单片机多路温度采集显示报警控制系统设计
查看>>
基于8086交通灯系统仿真设计(微机原理设计资料)
查看>>
TCP/IP五层模型之数据链路层
查看>>
解读域名管理之:域名注册机构介绍
查看>>
找中位数
查看>>
这些运维发展方向及系统运维技能都不了解,怎么能吃透Linux??
查看>>