kubernetes pod内存-java gc日志

问题描述 投票:1回答:1

在kubernetes仪表板上,有一个窗格,其中内存使用率(字节)显示为904.38Mi

此pod包含使用-Xms512m -Xmx1024m和kubernetes部署文件运行的Java应用-> requests.memory = 512Mlimits.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上没有其他进程在运行。任何人都可以对此有所了解吗?

java kubernetes memory-management garbage-collection kubernetes-metrics
1个回答
0
投票

GC处理进程使用的一部分内存。 JVM内存中有不属于垃圾收集区域的区域。

下面是堆/元空间中不包含的几个内存区域

  • 线程堆栈空间
  • 压缩类空间
  • JIT编译代码
  • NIO直接缓冲存储器

上面的列表不完整,这些只是最大的内存使用者。

[Here is JVM memory hierarchy diagram具有相关的配置选项。

总而言之,实际的JVM内存需求总是大于堆限制。

多少取决于应用程序的性质,可以根据经验确定。

© www.soinside.com 2019 - 2024. All rights reserved.