为什么在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
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