首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java进程的物理内存大于jcmd提交的内存。

Java进程的物理内存大于jcmd提交的内存。
EN

Stack Overflow用户
提问于 2022-04-05 07:09:54
回答 1查看 140关注 0票数 1

我有一个服务器java应用程序使用jetty websocket服务器和bittorrent跟踪器用于websocket客户端。

问题是,当我与许多客户端一起运行时,我的java应用程序中有内存泄漏。

我通过"htop“和"jcmd PID VM.native_memory”检查java应用程序的内存使用情况。

  • "htop“中的RES显示6.4g
  • 在"jcmd”中提交的内存显示2G

我使用的jetty websocket版本是jetty-9.4.15.v20190215,我尝试了更新版本jetty-9.4.44.v20210927,但是内存仍然泄漏。

我已经用jetty websocket客户端构建的客户端进行了测试,内存泄漏不会发生。

我还测试了以下选项

  • 只在我的服务器java应用程序
  • 上使用lib jetty websocket,当处理onMessage时,我只接收消息而不接受任何进程或响应

=>基本上服务器只接收来自客户端的连接,内存泄漏仍然发生。

问题是

导致内存泄漏的

  • 为什么"htop“中的物理内存(RES)大于jcmd ?

中提交的内存?

EN

回答 1

Stack Overflow用户

发布于 2022-04-05 07:25:51

“哪里会导致内存泄漏?”

可能是你的密码。例如,如果websockets在服务器端没有正确关闭,它们可能会占用各种资源.包括堆外缓冲区等。

Jetty代码中有一个bug会导致这种情况,这并不是不可想象的,但如果是的话,人们会期望其他人会报告它,诸如此类。(您是否检查了的Jetty,确认了Jetty代码中内存泄漏的报告?)

无论哪种方式,你都需要做一些调查。

为什么"htop“中的物理内存(RES)大于JVM中的内存使用量?

这并不稀奇。除了Java堆之外,典型的JVM使用大量内存。这种用法包括:

JVM可执行文件所使用的内存以及它所uses.

  • Metaspace的本机库.保存编译后的Java代码,等等。本机代码为各种purposes.

  • Memory映射文件请求的

  • 离开堆分配,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71747575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档