linux – 为什么Java VM进程会占用更多RAM,然后在-Xmx参数中指定?

我有多台运行CentOS 5.4的服务器,只有一台应用程序在 Java VM上运行.我已使用以下参数配置Java VM:
java -Xmx4500M -server -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:NewSize=1024m  -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote=true

我运行VM的机器有6 GB RAM,没有运行其他应用程序.过了一会儿,java进程开始真的很难打到交换空间,我从top命令中得到这个信息:

7658 root      25   0 11.7g 3.9g 4796 S 39.4 67.3 543:54.17 java

另一方面,如果我通过JConsole连接,它会报告Java VM使用2.6 GB,提交4.6 GB和最大4.6 Gb.

java -version返回:

java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01,mixed mode)

为什么Java VM在分配的堆大小之后扩展了这么多?如果在JConsole中没有报告,那么内存在哪里?

解决方法

我注意到一些基于商业Java的应用程序中的一个错误,其中应用程序在32位Java中运行良好,但需要额外的(并且大多数是不必要的)1.25GB才能开始使用64位Java.因此,32位Java需要256MB,在64位运行时需要1.5GB.

我怀疑Java正在报告它认为应用程序正在使用的内容,而不是它自己的运行时开销,特别是在调用此错误的情况下.

您可以尝试在32位运行时运行应用程序,或者回到供应商的技术支持(可能花费$$)并询问是什么.

最终,如果您成功限制了总内存占用量,那么您只需强制应用程序更快崩溃,而您仍然遇到问题.

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...