相关疑难解决方法(0)

kubernetes pod 内存 - java gc 日志

在 kubernetes 仪表板上,有一个 pod,其中内存使用情况(字节)显示为904.38Mi.

此 pod 包含使用-Xms512m -Xmx1024m, 和 kubernetes 部署文件 -> requests.memory = 512M,运行的 Java 应用程序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: …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection memory-management kubernetes kubernetes-metrics

8
推荐指数
1
解决办法
3499
查看次数

即使 Xms = Xmx,G1GC 是否会向操作系统释放内存?

喜欢读一些答案后,这个JEP-346,我已经意识到,G1确实释放内存返回给操作系统。

然而,它是否将内存释放回操作系统,甚至到了当前内存使用量可能低于初始堆内存的程度(即在此 JEP 之前,在我的情况下为 JDK11)?

假设我有一个 Java 11 VM在RAM上运行XmsXmx设置为,但是我只消耗大约. G1 会向操作系统释放足够的内存吗?5GB8GB1GB

我没有在任何地方找到任何文件说 G1 仅限于释放Xms记住阈值。

我在生产中观察到这一点,MemAvailable 一直减少到一个点,然后在 GC 之后,它在 8GB 的​​盒子上跃升至接近 30-35%。所以我假设它正在释放内存,这就是 MemAvailable 跳回的原因。

另外,向操作系统释放内存到底是什么意思,它是调用 free/unmap 吗?

java garbage-collection g1gc java-11

6
推荐指数
1
解决办法
1557
查看次数