我的Dockerfile
FROM openjdk:8-jre-alpine
COPY ./service-0.0.1-SNAPSHOT-app.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Xms1536m", "-Xmx1536m", "-XX:+UseConcMarkSweepGC", "-XX:CMSInitiatingOccupancyFraction=70", "-XX:+UseCMSInitiatingOccupancyOnly", "-verbose:gc", "-jar", "-Dspring.profiles.active=${ENV_NAME},${ENV_VERSION_NAME}", "/app.jar"]
我的容器运行命令
docker run -P -e ENV_NAME=dev -e ENV_VERSION_NAME=dev 7f25fb4baf24
Docker日志输出
[GC (Allocation Failure) 419456K->48832K(1520448K), 0.0318446 secs]
[GC (Allocation Failure) 468288K->85028K(1520448K), 0.2128481 secs]
[GC (CMS Initial Mark) 94900K(1520448K), 0.0051537 secs]
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.14.RELEASE)
附加信息:
GC (Allocation Failure)
此Jenkins实例是否还有足够的RAM?
如GC日志所示,堆占用1520 MB,并使用Xms
和Xmx
设置进行配置。
XX:ReservedCodeCacheSize
默认为240 MB。
Spring boot嵌入式tomcat默认创建200个线程。可以使用配置server.tomcat.threads.max=50
进行配置。每个线程的默认堆栈大小为1 MB。因此,所有线程将占用200 MB。如果需要,可以使用-Xss512k
配置堆栈大小。
因此您的应用程序将寻求1520+240+200=1960 MB
左右的可用内存。
默认情况下,您的容器将对系统上的所有RAM具有可见性,并且当需要在内部运行进程时,它会尝试自行扩展。您可以通过配置XX:MaxRAM
来限制Java进程可见的RAM。