我正在运行几个用 java 编写的小型服务器。其中一个监听标准套接字,其余的则使用 ActiveMQ 相互通信。我注意到一些奇怪的事情,如果我让系统空闲几个小时,RSS 内存要么会增加几到几十兆,要么会缩小几到几十兆。我使用 jconsole 来查看服务器中发生的情况,但内存使用和对象创建保持相对平稳。我使用 Oracle Java 和 OpenJDK 对此进行了测试。我尝试使用建议的解决方案设置 MALLOC_ARENA_MAX=4,但这没有效果。 JVM 中是否还有其他我不知道的事情正在发生,有没有办法阻止它?
设置:
- CentOS 7.4.1708(2G 内存,4 个处理器)
- Oracle Java 8u162
- OpenJDK 1.8.0.212
- glibc 2.17
最佳答案
Is there something else going on in the JVM
是的。垃圾收集、JIT编译、类加载/卸载、日志记录、I/O等。更多详情here .
Java 进程的 RSS 可以轻松地上下数百兆字节 - “几兆”通常根本不是问题。要查找 native 内存的分配位置,请打开 Native Memory Tracking功能和/或使用async-profiler如 this answer 中所述.
关于java - 空闲 Java 进程上的 RSS 内存不断增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841114/