在 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
谢谢,
埃姆雷
我不知道你怎么知道的。但我的理论是您的应用程序已将一个巨大的文件映射为MemoryMappedBuffer
. 您问题中的统计数据表明您正在使用 9.7 GB 的地址空间。
Emre He,根据您的设置,您只设置了 perm gen start/max size。尝试将这些参数添加到您的 JVM:-Xms128m -Xmx128m
“我的应用程序有 128MB 堆”是什么意思,你是用 -Xmx 128M 启动 JBoss 吗?
无论如何,堆大小并不能确定您的进程使用的内存量,JVM 会为其他事情分配内存,包括为每个线程分配一个堆栈。
但在您的情况下,这可能不是解释,因为 1.4GB 似乎很大。你在你的应用程序中做一些特别的事情吗?