首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将jvm调优为崩溃,而不是英雄式的GC,直到CPU使用率达到100%?

如何将jvm调优为崩溃,而不是英雄式的GC,直到CPU使用率达到100%?
EN

Stack Overflow用户
提问于 2013-01-18 02:31:12
回答 5查看 1.3K关注 0票数 10

我们有一个JVM进程,它很少将CPU占用100%,看起来(根据visualgc)是一个非常接近耗尽的堆。我们的假设是,该进程正在大刀阔斧地进行GC,从而导致CPU峰值,从而影响整个系统(由其他JVM执行不同任务)的整体健康状况。

此过程并不重要,可以重新启动。有没有办法通过命令行调优JVM,让它自食其力,而不是让它继续GC‘并导致整个机器都受到影响?

值得注意的是,我们没有得到OOMExceptions,所以堆并没有完全耗尽,但我们认为只是勉强没有耗尽。

或者,一些东西可以让我们深入了解JVM中实际使用CPU的方式,以确认/否认我们的GC假设?

EN

回答 5

Stack Overflow用户

发布于 2013-01-18 17:37:51

我们可以从以下地址获取统计数据

1):选项-XX:+PrintGCTimeStamps将在每个集合的开始处添加一个时间戳。这对于查看垃圾收集发生的频率很有用。

有了上面的选项,我们可以得到粗略的估计,无论您是否假设该进程正在英勇地进行GC,从而导致CPU峰值。

如果你的假设是正确的,那么开始调整你的GC。

代码语言:javascript
复制
 Both parallel collector and Concurrent Collector will throw an OutOfMemoryError if too much time is being
 spent in garbage collection: if more than 98% of the total time is spent in garbage collection and 
less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. the option X:-UseGCOverheadLimit 
 is enabled by default for both Parallel and concurrent collector . Check whether this option is disabled in
 your system .  

有关JVM中Gc调优的更多信息,请参阅this;有关vm调试选项,请查看this

票数 4
EN

Stack Overflow用户

发布于 2013-01-18 03:25:35

并行和并发收集器有一个“开销限制”,它可能会执行您想要的操作:

如果总时间的98%以上花费在垃圾收集上,而恢复的堆不足2%,则将抛出OutOfMemoryError

有关详细信息,请参阅http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

票数 3
EN

Stack Overflow用户

发布于 2013-01-18 02:49:46

最好的办法是找出内存泄漏并修复它。

一种在内存使用率较高时退出的简单方法:

代码语言:javascript
复制
if(Runtime.getRuntime().totalMemory()>100*1024*1024)
    System.exit(0);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14385753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档