我有一个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
Run Code Online (Sandbox Code Playgroud)
谢谢!
请粘贴您在启动时使用的JVM选项.您可以使用-Xmx选项调整JVM使用的最大内存,如前所述.
您的应用程序一直只使用603MB预留内存.所以看起来不应该关注你.您可以通过使用"jmap",启用jmx并通过jconsole连接或使用分析器来获取有关内存使用情况的一些详细信息.如果您想留在*nix land,如果您的操作系统支持,您也可以尝试"免费".
在你的情况下Jetty不占用12,5 gig的内存.它占用603MB.谷歌以"虚拟内存linux"为例,您应该获得有关虚拟内存和预留内存之间差异的大量信息.
虚拟内存在 64 位环境中几乎没有成本,所以我不确定问题是什么。常驻内存为 650 MB,仅为 MEM 的 1.3%。目前尚不清楚它使用了多少内存。
对于 64 位 JVM,默认最大堆大小是主内存的 1/4。如果您有 48 GB 内存,您可能会发现默认堆大小为 12 GB,并且对于某些共享库、线程等,这可能导致虚拟内存大小为 12.5 GB。这并不意味着您有内存泄漏,或者甚至有问题,但如果您愿意,可以减小最大堆大小。
顺便说一句:您可以以不到 200 美元的价格购买 32 GB。如果你的内存不足,我会再买一些。
| 归档时间: |
|
| 查看次数: |
8035 次 |
| 最近记录: |