在kubernetes仪表板上,有一个窗格,其中内存使用率(字节)显示为904.38Mi
。
此pod包含使用-Xms512m -Xmx1024m
和kubernetes部署文件运行的Java应用-> requests.memory = 512M
,limits.memory = 1.5G
。
我启用了gc日志,并在pod日志中看到了这些日志:
[2020-04-29T15:41:32.051+0000] GC(1533) Phase 1: Mark live objects
[2020-04-29T15:41:32.133+0000] GC(1533) Phase 1: Mark live objects 81.782ms
[2020-04-29T15:41:32.133+0000] GC(1533) Phase 2: Compute new object addresses
[2020-04-29T15:41:32.145+0000] GC(1533) Phase 2: Compute new object addresses 11.235ms
[2020-04-29T15:41:32.145+0000] GC(1533) Phase 3: Adjust pointers
[2020-04-29T15:41:32.199+0000] GC(1533) Phase 3: Adjust pointers 54.559ms
[2020-04-29T15:41:32.199+0000] GC(1533) Phase 4: Move objects
[2020-04-29T15:41:32.222+0000] GC(1533) Phase 4: Move objects 22.406ms
[2020-04-29T15:41:32.222+0000] GC(1533) Pause Full (Allocation Failure) 510M->127M(680M) 171.359ms
[2020-04-29T15:41:32.222+0000] GC(1532) DefNew: 195639K->0K(195840K)
[2020-04-29T15:41:32.222+0000] GC(1532) Tenured: 422769K->130230K(500700K)
[2020-04-29T15:41:32.222+0000] GC(1532) Metaspace: 88938K->88938K(1130496K)
[2020-04-29T15:41:32.228+0000] GC(1532) Pause Young (Allocation Failure) 603M->127M(614M) 259.018ms
[2020-04-29T15:41:32.228+0000] GC(1532) User=0.22s Sys=0.05s Real=0.26s
kubernetes是如何达到904.38Mi
使用率的?如果我正确理解,当前的用法仅仅是:
DefNew (young) - 0k
Tenured - 130230K
Metaspace - 88938K
Sum - 216168K
正在运行ps
显示除此Java应用程序外,pod上没有其他进程在运行。任何人都可以对此有所了解吗?
GC处理进程使用的一部分内存。 JVM内存中有不属于垃圾收集区域的区域。
下面是堆/元空间中不包含的几个内存区域
上面的列表不完整,这些只是最大的内存使用者。
[Here is JVM memory hierarchy diagram具有相关的配置选项。
总而言之,实际的JVM内存需求总是大于堆限制。
多少取决于应用程序的性质,可以根据经验确定。