首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于GC的Glassfish JVM设置

用于GC的Glassfish JVM设置
EN

Stack Overflow用户
提问于 2015-05-17 15:33:36
回答 1查看 1.8K关注 0票数 1

我正在我的glassfish服务器上运行一个应用程序,我有以下JVM设置(我认为这些设置与我的问题相关):-Xmx512m -XX:NewRatio=2 -XX:+UseParallelOldGC -XX:+UseParallelGC所有其他设置都是默认的。在过去的48小时里,我一直在用JMC测试服务器性能,我注意到这一点: PS老Gen有大约341 MB的堆,PS Eden有大约143 MB的堆,PS Surviovor有大约13 MB的堆(这足够了吗?还是我应该使用不同的SurvivorRatio?)

图显示,在开始时,java堆有大约200 to的分配空间,但是在每个完整GC之后,它增长了大约450 to,甚至使用的堆(在每个完整GC之后)下降到了大约100 to,并且比缓慢增长到下一个小GC/full GC.为什么提交的java堆(红线)增加?这是正常行为吗?当它达到512 it时,它会停止吗?我应该使用从一开始提交的java堆为512 be的-Xms512m吗?

现在关于垃圾收集:小GC (PS清道夫)大约每1分钟运行一次,持续时间在10-30 PS左右。完整GC (PS MarkSweep)大约每14-18小时运行一次,最初的持续时间为200 PS,而最后一次的持续时间为20秒(我不知道为什么持续时间有这么大的差异)!我想知道这是否可以,如何取得更好的结果?我应该使用-XX:+UseConcMarkSweepGC -XX:+UseParNewGC,甚至是-XX:+UseG1GC吗?如果我使用这些GC中的任何一个,我将不得不增加最大堆大小(我看到UseG1GC只用于较大的堆)?我是否必须更改除GC类型之外的任何其他设置(如SurvivorRatio、NewRation、.)?

JMC中的GC持续时间是否等于停止世界暂停时间(还是暂停时间更短)?因此,如果我有20秒的GC持续时间为全部GC,这是否意味着我的服务器在20秒内没有响应?我的服务器上有JAX,我每10秒使用ajax调用其中一个(超时时间为10秒),这意味着至少有2个调用不会成功?在这种情况下,ajax调用的状态是什么(可能是错误)?我必须警告用户错误调用,我不知道在这种情况下,如果一个错误是由于GC暂停.

如果我有-Xmx1024m (比现在大两倍),那么完整的GC会更少见,但是它会持续更长的时间吗?

我读了很多关于JVM和JVM GC的文章,但是我仍然不知道我要做什么,所有的设置对于我的应用程序来说都是最优的(我担心最后20秒的GC持续时间长).

谢谢你的回答!

EN

回答 1

Stack Overflow用户

发布于 2015-05-17 20:25:13

完整GC (PS MarkSweep)大约每14-18小时运行一次,最初运行时间为200 PS,而最后一次运行时间为20秒。

尝试通过-XX:MaxGCPauseMillis设置暂停时间目标。

我应该使用-XX:+UseConcMarkSweepGC -XX:+UseParNewGC,甚至是-XX:+UseG1GC吗?

这当然是一种选择,但是由于并行收集器似乎能够在一开始就提供相当好的延迟,并且随着旧代的增加而变得更糟,所以您可能不需要这样做。

图显示,在开始时,java堆有大约200 to的分配空间,但是在每个完整GC之后,它增长了大约450 to,甚至使用的堆(在每个完整GC之后)下降到了大约100 to,并且比缓慢增长到下一个小GC/full GC.为什么提交的java堆(红线)增加?

因为您使用的是并行收集器,它的主要目标是吞吐量(如果没有对其进行限制,可能会损害内存占用或延迟)。而且,它可以提供最高的吞吐量,通过收集很少当大量的垃圾已经积累。

通过提供一个暂停时间目标,如果堆变得太大,无法满足暂停时间目标,它将停止增长。

如果我有-Xmx1024m (比现在大两倍),那么完整的GC会更少见,但是它会持续更长的时间吗?

有可能,但是一旦不能满足MaxHeapFreeRatio目标,GC就会停止堆的增长。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30288630

复制
相关文章

相似问题

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