Docker :如何在运行 docker 日志时打印 jvm 内存信息



我有一个基于java spring-boot的应用程序,运行在Docker上。

在我的docker 文件中,我正在使用入口点

显然,我是这样使用它的:

ENTRYPOINT ["java","-Dfile.encoding=utf-8", "-XX:+ExitOnOutOfMemoryError","-Xms256m","-Xmx256m", "-XshowSettings:vm","-jar","/opt/myapp.jar", "--spring.profiles.active=server"]

像这样,当容器启动时:它在运行docker logs时显示这样的值:

VM settings:
Min. Heap Size: 256.00M
Max. Heap Size: 256.00M
Ergonomics Machine Class: client
Using VM: OpenJDK 64-Bit Server VM

.   ____          _            __ _ _
/\ / ___'_ __ _ _(_)_ __  __ _    
( ( )___ | '_ | '_| | '_ / _` |    
\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v1.3.0.RELEASE)

但是通过一点点转换入口点格式(注入一些 en vars(:

ENTRYPOINT java -jar /opt/myapp.jar -Dfile.encoding=utf-8 -XX:+ExitOnOutOfMemoryError -Xms=${XMS_VALUE} -Xmx=${XMX_VALUE} -XshowSettings:vm -XX:+PrintFlagsFinal --spring.profiles.active=server

这隐藏了jvm值,只显示弹簧图:

.   ____          _            __ _ _
/\ / ___'_ __ _ _(_)_ __  __ _    
( ( )___ | '_ | '_| | '_ / _` |    
\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v1.3.2.RELEASE)

我怎样才能让它再次出现??

JVM选项和参数的顺序很重要。用法是:

java [options] -jar <jarfile> [args...]
(to execute a jar file)

因此,JVM选项必须放在-jar选项之前,否则它们被视为应用程序参数

ENTRYPOINT java -Dfile.encoding=utf-8 -XX:+ExitOnOutOfMemoryError 
-Xms${XMS_VALUE} -Xmx${XMX_VALUE} 
-XshowSettings:vm -XX:+PrintFlagsFinal -XshowSettings:vm 
-jar /opt/myapp.jar --spring.profiles.active=server

运行它:

docker run -e XMX_VALUE=256M -e XMS_VALUE=256m <image_name>