【发布时间】:2018-08-20 02:11:44
【问题描述】:
我们基本上是在调整我们的 JVM 选项。
-J-Xms1536M -J-Xmx1536M -J-Xss3M -J-Djruby.memory.max=1536M -J-Djruby.thread.pool.enabled=true -J-Djruby.compile.mode=FORCE -J- XX:NewRatio=3 -J-XX:NewSize=256M -J-XX:MaxNewSize=256M -J-XX:+UseParNewGC -J-XX:+CMSParallelRemarkEnabled -J-XX:+UseConcMarkSweepGC -J-XX:CMSInitiatingOccupancyFraction=75 -J-XX:+UseCMSInitiatingOccupancyOnly -J-XX:SurvivorRatio=5 -J-server -J-Xloggc:/home/deploy/gcLog/gc.log -J-XX:+PrintGCDateStamps -J-XX:+PrintGCDetails -J -XX:+PrintGCApplicationStoppedTime -J-XX:+PrintSafepointStatistics -J-XX:PrintSafepointStatisticsCount=1
我们已将-J-Xmx1536 和-J-Xms1536M 设置为1536M。现在
如果我理解正确的话 -J-Xmx 代表堆的最大大小。
系统是4核15GB内存进程。
但是,当我检查正在运行的 Java 进程的 RSS(使用顶部)时,我发现它消耗的值大于 ~2GB 周围的 -JXmx1536。
现在很明显,JVM 堆已经增加到超过-Jmx 的指定值。
所以我的问题是..
为什么?我没有看到任何 Java 内存不足异常。
对于具有 4 个内核和 15GB RAM 的
-JXmx,什么是理想的设置。(假设系统中除了 Java 应用程序之外没有其他进程正在运行)
【问题讨论】:
-
因为 heap 不是 JVM 使用的唯一内存池。还有 JVM 内部内存和线程堆栈,可能还有更多。
-
如果你的机器有 15GB,为什么你只分配 1.5GB 给 Java?多少是理想的?取决于您的应用程序。
-
@Andreas 就像我说的那样,我们正在测试 JVM 选项……我们最初的测试发现这个数字符合我们的需要,但现在看来,从长远来看,这个值会少得多与我们拥有的可用 RAM 相比。因此是第二个问题。