-Xms 选项似乎在 gke 上被忽略,但 -Xmx 正在工作

-Xms option seems to ignored on gke but -Xmx is working

我是 GKE 集群上的 运行 java 应用程序(ksqldb 0.15.0),并通过了 java 选项 -Xms3G-Xmx5G

-Xmx 选项运行良好,但 -Xms 选项似乎没有受到影响。

运行命令如下;

java -cp /usr/share/java/ksqldb-rest-app/*: -Xms3G -Xmx5G -server -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+ExplicitGCInvokesConcurrent -XX:NewRatio=1 -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dksql.log.dir=/usr/logs -Dlog4j.configuration=file:/etc/ksqldb/log4j.properties -Dksql.server.install.dir=/usr -Xlog:gc*:file=/usr/logs/ksql-server-gc.log:time,tags:filecount=10,filesize=102400 io.confluent.ksql.rest.server.KsqlServerMain /etc/ksqldb/ksqldb-server.properties

为了调查,我发出了 jstat 命令,结果如下;

NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC CGC
192 2621440 1572864 157248 157248 1258368 64 2621440 1572864 1572864 0 1163264 132268 0 1048576 18828 505 0 4

NGCMN + OGCMN总和的期望值为3145728(=3GB),但实际值为256。
但是,NGCMX + OGCMX 的总和为 5242880(=5GB),因此 -Xmx 选项正确生效。

pod 所在的主机 运行 有 15GB 的物理内存。

我是不是漏掉了什么?

-Xms 设置 初始 堆大小,而不是最小大小。

NGCMNOGCMN分别表示新生代和老年代的最小容量。大多数时候这些数字是无用的。你可能想看的是 NGC/OGC - 新一代和老一代的 current 容量。

您已设置-Xms3G,当前堆大小恰好是

NGC + OGC = 1572864 + 1572864 KB = 3 GB