maxpermsize java_关于java:-XX:MaxPermSize带有或不带有-XX:PermSize

我们遇到了Java.lang.OutOfMemoryError:PermGen空间错误,并查看了-Xms和-Xmx参数之外的tomcat JVM参数,我们也指定了-XX:MaxPermSize=128m。 经过一些分析后,我看到偶尔在PermGen空间上发生垃圾收集,从而使其无法完全运行。

我的问题是:除了增加-XX:MaxPermSize以外,如果我也指定-XX:PermSize会有什么不同? 我知道那时的总内存为Xmx + maxPermSize,但是是否还有其他原因为什么当指定-XX:MaxPermSize时-XX:PermSize不应该存在?

如果您有处理这些JVM参数的实际经验,请分享。

ps。 JVM是HotSpot 64位服务器VM版本16.2-b04

您只需要关心最大值,这个问题的能量和熵b / c的浪费永远不会接近"完美地"调整jvm的节省。 maxPerGen很重要,它可以指定任意高值,jvm不会在实际需要之前提交。

-XX:PermSize指定将在JVM启动期间分配的初始大小。如有必要,JVM将最多分配-XX:MaxPermSize。

真正。这也很不同,总内存显示为Xmx + maxPermSize,这非常重要。这就是为什么我要问是否还有其他事情发生。

总内存超过mx和maxperm。特别是,您为每个线程获得了一些内存(堆栈)。如果您有成千上万(这不是一件好事),那么这可能会占到整体大小的50%。当您具有一些JNI实现时(例如,更多的SAP JCO驱动程序),本机堆可能还会过多。并且某些组件还使用堆外直接映射内存。

通过使用参数-XX:PermSize和-Xms可以调整应用程序启动的性能,例如。我最近没有看过它,但是几年前-Xms的默认值大约是32MB(我认为),如果您的应用程序需要的数量远远超过它,它将触发多个填充内存周期-完整的垃圾收集-增加内存等,直到它加载了所需的一切。此周期可能会对启动性能造成不利影响,因此,立即分配所需的编号可以改善启动效果。

类似的周期适用于永久代。因此,调整这些参数可以改善启动效率(以及其他)。

警告JVM在分配内存,划分eden空间和较早的代数等方面具有很多优化和智能,因此请勿执行使-Xms等于-Xmx或-XX:PermSize等于-XX:MaxPermSize的操作。因为它会删除JVM可以应用于其分配策略的某些优化,因此降低了应用程序性能而不是提高了性能。

一如既往:进行非常规的测量以证明您的更改实际上改善了整体性能(例如,缩短启动时间可能会对应用程序使用期间的性能造成灾难性影响)

谢谢。我惊讶地发现,即使在其他地方,有关此观点的看法却截然相反(请参阅@mijer响应)。我理解这一点,因为除非我们研究JVM的C代码,否则我们真的不知道该标志在做什么以及它如何与另一个标志交互。这就是为什么我一直在寻找动手实践的经验。

不是所有用户都共享"不要做使-Xms等于-Xmx的事情"注释。 Tomcat特别建议将它们设置为相同的值。 tomcatexpert.com/blog/2011/11/22/

@JohnHinnegan将其设置为相同的值确实有其优点(例如,启动时减少了垃圾收集),但是正如我在回答中所说的那样,它将阻止JVM进行一些优化。在这种情况下,您要么必须忍受它,要么自己使用JVM的命令行选项进行这些优化。

与Mark +1,不要事先做。重新发布:尝试解释一下为什么" set -Xms = Xmx"值如此之大的原因,我认为这是由于很多年前JVM的自适应能力差很多的缘故。如今,Id建议在经过严格的性能测试之后再作最后的选择。确实,JVM在自适应方面已经取得了很好的成绩,JVM世界闻名的专家,例如Kirk Pepperdine告诉我们,预先设置这些值就像要求音乐家用一只手绑在您的背上演奏(在训练中听过)一样。

最好不要使用Xms = Xmx作为配方。但是在某些情况下,它可能是一个不错的选择,它取决于您要优化的内容。您是否要优化应用程序吞吐量或其内存指纹?

您能否更具体地说明使用Xms @Onur iirc,以Java 5开头,它改进了每个版本

如果要进行性能调整,通常建议将-XX:PermSize和-XX:MaxPermSize设置为相同的值,以提高JVM效率。

这里是一些信息:

在x86和amd64平台上支持大页面堆

Java对大内存页面的支持

设置永久代大小

您还可以指定-XX:+CMSClassUnloadingEnabled以启用类卸载

如果使用的是CMS GC,则该选项。这可能有助于降低Java.lang.OutOfMemoryError: PermGen space的可能性

谢谢。我惊讶地发现即使在其他地方,这些视图也截然相反(请参阅@Mark Rotteveel响应)。我理解这一点,因为除非我们研究JVM的C代码,否则我们真的不知道该标志在做什么以及它如何与另一个标志交互。这就是为什么我一直在寻找动手实践的经验。

另请参见GC调整Java 6将-Xms和-Xmx设置为相同的值可通过从虚拟机中删除最重要的大小确定决策来提高可预测性。另一方面,如果选择不当,虚拟机将无法补偿。

为了尝试解释一下为什么" set -Xms = Xmx"值如此之大的原因,我认为这是由于很多年前JVM的自适应能力差的事实。如今,Id建议在经过严格的性能测试之后再作最后的选择。确实,JVM在自适应方面已经取得了很好的成绩,JVM世界闻名的专家,例如Kirk Pepperdine告诉我们,预先设置这些值就像要求音乐家用一只手绑在您的背上演奏(在训练中听过)一样。

我从事低延迟应用程序工作了几年。 没有简单的性能配方,这取决于我们要优化的内容(成本,延迟等),我经常应用Xms = Xmx来提高性能。 当由于我们预定底层资源而让JVM进行复杂的计算以适应其消耗时,这种调整是有意义的。 显然,这需要认真思考/测试的阶段,不仅要在Java命令行上进行良好的调整,而且还要购买良好的基础硬件。

第三链接打破了仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值