use*_*282 0 java jvm memory-management docker
最初的问题是docker的java应用程序由于内存使用而被OOM杀死。所以我开始使用 NMT 来理解为什么消耗比预期多。JVM 版本为 1.8.0_212,支持容器。docker 与下一个 java 选项一起启动
JAVA_OPTS='-XX:+AlwaysPreTouch -Xmx128m -Xms128m -XX:MaxMetaspaceSize=150m -XX:ReservedCodeCacheSize=100m -XX:+UseStringDeduplication -XX:+PrintFlagsFinal -XshowSettings:vm -XX:NativeMemoryTracking=detail' ... -m="450m" --cpu-shares="256" docker-image
本机内存跟踪:
Total: reserved=1464054KB +843KB, committed=344578KB +1359KB
...
-                     Class (reserved=1124594KB +19KB, committed=85066KB +275KB)
                            (classes #15631)
                            (malloc=2290KB +19KB #20081 +27)
                            (mmap: reserved=1122304KB, committed=82776KB +256KB)
...
所有数字均符合预期。唯一的问题是 Class 字段,因为它显示保留值约为 1GB,是否可以以某种方式减少?
这是压缩类空间。
默认限制正好是 1GB,可以通过 减少-XX:CompressedClassSpaceSize=N。
本机内存跟踪输出中的“类”区域包括元空间和压缩类空间,这就是为什么您会看到超过 1GB 的保留空间。然而,保留的内存只是虚拟地址空间的数量——它不占用物理内存页。
| 归档时间: | 
 | 
| 查看次数: | 1167 次 | 
| 最近记录: |