【发布时间】:2013-01-23 21:47:56
【问题描述】:
我有一个 Jetty 服务器,用于我正在开发的应用程序的 websocket 连接。唯一的问题是 Jetty 消耗了太多的虚拟内存(!2.5GB 的虚拟内存)和大约 650RES。
我的问题是,如上所述,大部分内存(大约 12gb)不是堆大小,因此分析它并了解正在发生的事情更加困难。
对于如何了解 12gb 消耗的来源以及如何找出内存泄漏或服务器的任何其他问题,您有什么建议吗?
我想澄清虚拟内存的含义(因为我的理解可能是错误的)。当我运行顶部时,虚拟内存是“VIRT”。这是我得到的:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
-------------------------------------------------------------
9442 root 20 0 12.6g 603m 10m S 0 1.3 1:50.06 java
谢谢!
【问题讨论】:
-
Joakim,我使用的是 8.1.7.v20120910
-
用 long totalMemory = Runtime.getRuntime().totalMemory() 检查内存消耗; long freeMemory = Runtime.getRuntime().freeMemory(); return (totalMemory - freeMemory);
-
JVM 会占用你给它的任何内存。如果您指定一个较大的
-Xmx值,那么您将看到分配的内存。如果您没有指定那么大的堆,那么是时候查看 pmap 以了解内存的去向了。 -
使用分析器看看
-
在上面添加了更多详细信息,如果这为你们提供了更多信息,请告诉我