了解Jetty的内存使用情况

时间:2013-01-23 21:47:56

标签: java memory jetty

我有一个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

谢谢!

2 个答案:

答案 0 :(得分:5)

请粘贴您在启动时使用的JVM选项。您可以使用-Xmx选项调整JVM使用的最大内存,如前所述。

您的应用程序一直只使用603MB的预留内存。所以看起来不应该关注你。您可以通过使用“jmap”,启用jmx并通过jconsole连接或使用分析器来获取有关内存使用情况的一些详细信息。如果你想留在* nix land,你也可以尝试“免费”,如果你的操作系统支持它。

在你的情况下,Jetty不占用12,5 gig的内存。它占用603MB。例如谷歌的“虚拟内存Linux”,你应该获得有关虚拟内存和预留内存之间差异的大量信息。

答案 1 :(得分:1)

虚拟内存在64位环境中几乎没有成本,所以我不确定是什么问题。常驻内存为650 MB或仅为MEM的1.3%。目前尚不清楚它是否占用了大量内存。

默认的最大堆大小是64位JVM的主内存的1/4。如果您有48 GB的内存,您可能会发现默认堆大小为12 GB,并且有一些共享库,线程等,这可能导致12.5 GB的虚拟内存大小。这并不意味着您有内存泄漏,或者您甚至遇到问题,但如果您愿意,可以减少最大堆大小。

顺便说一句:您可以以低于200美元的价格购买32 GB。如果你的内存不足,我会买更多。