4

在 linux 平台上,我在 jboss 上的 java 应用程序有 128MB 堆,但使用 1.6GB 的实际 RAM。我怎样才能知道 1.4GB 的去向?

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM  CODE DATA TIME+  COMMAND
 1379 root      16   0  9.7g 1.6g 1980 S  0.7  1.3 36  9.7g 0:11.03 java

谢谢,
埃姆雷

4

4 回答 4

1

我的第一步是检查内存分析器中的进程,例如VisualVMYourKit。这可以让您初步了解进程的内存使用情况

另一个可能有助于解决此类问题的工具是jmap.

于 2012-05-09T10:51:53.030 回答
1

我不知道你怎么知道的。但我的理论是您的应用程序已将一个巨大的文件映射为MemoryMappedBuffer. 您问题中的统计数据表明您正在使用 9.7 GB 的地址空间。

于 2012-05-09T10:52:37.273 回答
0

Emre He,根据您的设置,您只设置了 perm gen start/max size。尝试将这些参数添加到您的 JVM:-Xms128m -Xmx128m

于 2012-05-09T14:45:31.383 回答
0

“我的应用程序有 128MB 堆”是什么意思,你是用 -Xmx 128M 启动 JBoss 吗?

无论如何,堆大小并不能确定您的进程使用的内存量,JVM 会为其他事情分配内存,包括为每个线程分配一个堆栈。

但在您的情况下,这可能不是解释,因为 1.4GB 似乎很大。你在你的应用程序中做一些特别的事情吗?

于 2012-05-09T11:00:48.870 回答