【发布时间】:2018-04-28 19:44:49
【问题描述】:
为基于 JVM 的服务确定 docker 容器的尺寸是很棘手的(众所周知)。我很确定我们稍微缩小了容器的尺寸,并想澄清一些与我们在监控时看到的特定 jcmd(本机内存跟踪器)输出有关的问题。
问题:
- jcmd 报告的“内部”中是否包含直接字节缓冲区?
- jcmd 报告的“代码”中除了代码缓存之外还有什么?
- 有没有一种好的方法来限制 jcmd 报告的“代码”部分。我阅读了https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/codecache.htm,但这仅涵盖代码缓存限制,建议保持 JVM 默认不变。
JCMD output 在这里。
Direct Byte Buffers JMX 属性在这里。
一些背景细节:
设置:
- 基于 Spring Boot 的应用程序
-
JVM 选项:
-server -Xms1792m -Xmx1792m -XX:MetaspaceSize=128M - XX:MaxMetaspaceSize=192M -XX:+UseG1GC -XX:+UseStringDeduplication - XX:MaxDirectMemorySize=256m -XX:NativeMemoryTracking=detail
- Docker 容器 2500MiB 在 AWS/EC2 中运行
【问题讨论】:
标签: java linux memory-management jvm jcmd