我正在linux和Linux上运行2个jboss5.1服务器solaris机器,具有类似的jvm(xms& xmx)配置。但是,当我检查服务器启动时的内存使用情况时:
linux机器 - 2.1gb内存使用量(RES)
Solaris机器 - 500mb内存使用
jboss进程在linux上使用的内存从一开始就超过1 GB(甚至在任何类加载开始之前)。当我从linux转储时,它的大小只有700 MB左右。
什么可能导致这种记忆差异?
答案 0 :(得分:0)
很多事情可能会有所不同,而且这里没有足够的信息来了解什么。例如,它们都是64位操作系统和64位JVM吗? malloc的行为怎么样 - 这取决于操作系统。仅仅因为进程要求N字节的内存并不意味着它会立即获得那么多内存 - 内存分配器可能非常聪明。然后就是操作系统如何报告它是否真的是一个苹果对苹果的测量问题。
“内存使用”意味着很多东西。我们是在谈论Java堆(如果您在启动后使用两个VM的堆转储和相同的启动工作,它们是相同的大小还是不同?),或者加上类数据等?您还在图片中有热点,将Java字节码编译为本机代码,这两个操作系统之间会有所不同(如果您的Solaris机箱是Sparc机器,则可能大小不同)
最有可能的是64位与32位,但这是不可能的。您可以在每个上使用一些本机分析工具来查看哪些调用正在分配内存 - 这将开始澄清事情。
除非它引起问题,否则可能不用担心 - 但健康的好奇心是一件好事。