当前位置: 首页 > 知识库问答 >
问题:

为什么在linux&JDK1.6.0_32中JVM不能自动扩展堆内存到配置的Xmx3072m,而且FullGC非常频繁

诸葛雨泽
2023-03-14

为什么在linux&JDK1.6.032中JVM内存不能自动扩展到Xmx3072m?

终身代使用率为99%,并提供全GC频率。java进程仅使用1G内存,可以从top的输出中看到这一点。

MinHeapFreeRatio    40
MaxHeapFreeRatio    70 
OS: 

Linux linux-wgvb 2.6.16.60-0.54.5-smp #1 SMP Fri Sep 4 01:28:03 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux 

JDK version: 

java version "1.6.0_32" 
Java(TM) SE Runtime Environment (build 1.6.0_32-b05) 
Java HotSpot(TM) 64-Bit Server VM (build 20.7-b02, mixed mode) 

JVM params: 

-Xms256m -Xmx3072m  -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=1000
-XX:ParallelGCThreads=5 -Xrs -XX:PermSize=64m -XX:MaxPermSize=512m
-XX:+HeapDumpOnOutOfMemoryError 

FullGC经常执行:

@linux> ./jstat -gcutil 18261 1000 500 

   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
 0.00  64.67   7.04  99.53  71.89  18293  510.574  1167 1616.594 2127.168 
91.78   7.91 100.00  99.53  72.00  18299  510.821  1167 1616.594 2127.415 
77.49   0.00   0.00  99.99  72.00  18300  510.947  1168 1616.594 2127.541 
 0.00  99.83  25.71  99.49  71.72  18305  511.178  1168 1617.915 2129.093 
24.27   0.00  21.74  99.67  71.73  18310  511.342  1168 1617.915 2129.256 
28.57   0.00   0.00  99.83  71.73  18314  511.427  1169 1617.915 2129.342 
 0.00  29.29   0.00  99.56  71.82  18317  511.465  1169 1618.919 2130.384 
 0.00  78.85  54.96  99.56  72.05  18326  511.777  1169 1618.919 2130.696 
64.52   0.00   0.00  99.99  72.05  18328  511.920  1170 1618.919 2130.839 
 0.00  99.26   0.00  99.88  71.71  18333  512.079  1171 1620.014 2132.093 
 4.86   0.00   0.00  99.95  71.76  18338  512.255  1172 1620.957 2133.211 
80.98   0.00   0.00  99.69  71.83  18350  512.453  1172 1621.906 2134.359 
 0.00  64.48   0.00  99.85  71.83  18355  512.677  1173 1621.906 2134.583 
 0.00  99.80   0.00  99.93  71.71  18359  512.876  1174 1623.264 2136.139 
 0.06   0.04 100.00  99.55  71.71  18360  512.876  1174 1624.193 2137.069 
60.35   0.00   0.00  99.90  71.77  18376  513.429  1175 1624.193 2137.622 
60.35   0.00   0.00  99.90  71.77  18376  513.429  1175 1624.193 2137.622
89.86   0.00   0.00  99.83  71.78  18384  513.839  1176 1625.476 2139.315 
89.86   0.00   0.00  99.83  71.78  18384  513.839  1176 1625.476 2139.315 
 0.00  39.17  64.41  99.60  71.78  18394  514.202  1176 1626.880 2141.082 
99.93   0.00   0.00  99.82  71.78  18396  514.326  1177 1626.880 2141.206 
 0.00  64.68   0.00  99.61  71.72  18401  514.409  1177 1627.945 2142.354 

java进程只使用了1G内存:

   PID USER     PR  NI    VIRT  RES  SHR  S  %CPU  %MEM     TIME+  COMMAND
 18261 ouser    15   0   4353m 1.0g  52m  S   325  3.2  271:25.52  java
./jstat -gccapacity 18261 1000 500
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC 
 87360.0 1048576.0 136256.0 65984.0 68096.0     64.0   174784.0  2097152.0   785664.0   785664.0  65536.0 524288.0  65792.0  65792.0 141612  8100
 87360.0 1048576.0 122816.0 61376.0 12992.0     64.0   174784.0  2097152.0   791360.0   791360.0  65536.0 524288.0  65792.0  65792.0 141616  8100
 87360.0 1048576.0 115264.0 57600.0 7872.0     64.0   174784.0  2097152.0   791936.0   791936.0  65536.0 524288.0  65792.0  65792.0 141617  8101
 87360.0 1048576.0 112576.0 54912.0 56256.0     64.0   174784.0  2097152.0   797952.0   797952.0  65536.0 524288.0  65792.0  65792.0 141618  8102
 87360.0 1048576.0 112576.0 54912.0 56256.0     64.0   174784.0  2097152.0   797952.0   797952.0  65536.0 524288.0  65792.0  65792.0 141618  8102
 87360.0 1048576.0 105408.0 52672.0  192.0     64.0   174784.0  2097152.0   804096.0   804096.0  65536.0 524288.0  65792.0  65792.0 141621  8103
 87360.0 1048576.0  87360.0 35584.0 38464.0   8064.0   174784.0  2097152.0   805568.0   805568.0  65536.0 524288.0  65792.0  65792.0 141629  8103
 87360.0 1048576.0 111168.0 39488.0 46080.0  12416.0   174784.0  2097152.0   805568.0   805568.0  65536.0 524288.0  65792.0  65792.0 141635  8103
 87360.0 1048576.0 142848.0 69440.0 70592.0   1664.0   174784.0  2097152.0   805568.0   805568.0  65536.0 524288.0  65792.0  65792.0 141644  8104
 87360.0 1048576.0 142848.0 69440.0 70592.0   1664.0   174784.0  2097152.0   805568.0   805568.0  65536.0 524288.0  65792.0  65792.0 141644  8104
 87360.0 1048576.0  87360.0 35136.0 37376.0  10304.0   174784.0  2097152.0   769280.0   769280.0  65536.0 524288.0  65792.0  65792.0 141661  8105

共有1个答案

沈弘文
2023-03-14

res值不是进程使用了多少内存,而是它实际使用了多少RAM。这不包括交换页和已分配但未映射的页。确保系统本身有足够的空闲内存,您可以运行free,甚至top应该打印的内存数高于使用的内存数。top的输出表明进程映射了4g内存,但当前不在RAM中(virt值)。

 类似资料:
  • JVM规范表明JVM堆栈可以是固定大小的,也可以是动态扩展的。 -Xss JVM选项允许设置固定大小,如果我没有设置这个选项是设置默认值(大约512-2048k),但是如何告诉JVM在需要时动态分配它的堆栈呢? 如果我不能设置动态大小选项,那么设置一个大的Xss值(比如说20M)实际上会为JVM中的每个线程分配20MB内存吗?还是动态分配的内存会被限制在20MB?

  • 为什么我不能这样做/是否有解决方法来实现这一点: 这两个编译错误是 > On

  • 问题内容: 我想知道为什么在Java语言中a 不能扩展。 我不是在谈论一个延伸的(这不能做,因为Java没有多重继承,而Š隐含延长),但一类的以只添加额外的方法,而不是额外的枚举值。 就像是: 要这样使用: 因此,有人可以对此限制提供理由(或将我指向正确的JLS部分)吗? 问题答案: 我认为 他们这样做 的答案来自以下问题: 在您的示例中,如何实例化MyClass?用户永远不会(通过)显式实例化枚

  • 问题内容: 我以为Python信任程序员。 问题答案: 圭多对此的看法: 我昨晚想到了这一点,意识到根本不应该允许您继承bool!子类仅在具有实例时才有用,但是仅存在bool子类的实例将打破不变的事实,即True和False是bool的唯一实例!(C的子类的实例也是C的实例。)我认为重要的是不要提供后门来创建其他bool实例,因此我认为bool不应是子类的。 参考: http //mail.pyt

  • 在我的springbootapp中,我有以下存储库:- 当我运行这个应用程序时。我收到了这个错误:- 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2020-12-24 21:09:15 - 应用程序启动失败 说明: com中构造函数的参数0。如何使用Java。演示。存储库。RevisionRepository需要“org”类型的bean

  • JVM选项: 正如预期的那样,JVM将为JVM堆分配将近20MB的内存。 但请参阅以下 GC 详细信息: PSYoungGen总计9216K,已用4612k[0x 00000000 ff 6000000,0x 0000000010000000100000000]< br > Eden空间8192K,56%已用[0x 000000000 ff 600000,0x 0000000 FFA 812d 8