java Openshift中的JVM最大堆大小不变

mmvthczy  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(172)

我有一个在Openshift上运行的Java应用程序。Java通过docker-entrypoint.sh文件运行

cd /usr/src/java_app
/usr/local/openjdk-8/bin/java -Xmx12g -jar application.jar --spring.profiles.active=prod >> /proc/self/fd/1 2> /proc/self/fd/1

我的Openshift deploymemt内存部分如下:

containers:
  - resources: 
      limits:
        memory: 12g
      requests:
        memory: 12g

我尝试使用以下选项运行jar命令:

-Xmx12g
-XX:MaxHeapSize=12g
-XX:MaxRAM=12g
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:ErgoHeapSizeLimit=0

但是在跑步的时候

java -XX:+PrintFlagsFinal -version | grep Heap

我总是得到一个~3g的堆大小,这是我给容器的12 g的25%。如果容器给予16 G,则该值变为4g。另外,我可以看到'product'负责设置这个值,所以我猜它在代码中没有被覆盖。
跑步

java -XX:+PrintCommandLineFlags

退货

-XX:InitialHeapSize=187499968 -XX:MaxHeapSize=29999999488

我会很感激一些帮助,鉴于内存不是那么便宜

ghg1uchk

ghg1uchk1#

你用的是什么版本的Java 8?旧版本的Java 8无法正确“查看”可用内存
请参阅本文,了解如何根据您的版本(即JDK 8u191之前或之后)配置Java 8
https://www.baeldung.com/ops/docker-jvm-heap-size
如果您使用的是OpenShift 4.12,请查看本文,了解最新版本的Java 8对cgroups v2的支持的许多改进,但您需要最新版本的JDK 8:
https://developers.redhat.com/articles/2023/04/19/openjdk-8u372-feature-cgroup-v2-support#

相关问题