繁体   English   中英

我的应用程序有128MB的堆,但是使用1.6GB的实际RAM。 如何找到1.4GB的存储空间?

[英]My app has 128MB heap but uses 1.6GB of real RAM. How can I find out where the 1.4GB go to?

在linux平台上,jboss上的My 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

谢谢,
埃姆雷

我的第一步是在内存分析器(例如VisualVMYourKit)中检查该过程。 这可以使您对进程的内存使用量实际发生的情况有很多初步了解。

另一个可能有助于解决此类问题的jmapjmap

我不确定您如何找到答案。 但是我的理论是,您的应用程序已将一个巨大的文件映射为MemoryMappedBuffer 您问题中的统计数据表明您正在使用9.7 GB的地址空间。

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

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

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

Emre He,根据您的设置,您仅设置了perm gen的开始/最大大小。 尝试将以下参数添加到您的JVM:-Xms128m -Xmx128m

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM