我正在将一个Java Spring-Boot应用程序部署为Docker容器,部署的服务器有16 GB内存。
Docker服务器版本为19.03.12,运行在Ubuntu 18.04.4 LTS上。我的Docker镜像安装了openjdk-11作为Java运行时。入口点定义如下:
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
我启动容器时没有对CPU和内存进行任何限制,但是当堆空间达到8 GB时,应用程序总是会出现OutOfMemoryError。尽管系统仍有约3-4 GB的可用内存,但仍在运行其他一些容器。
为什么容器中的JVM受到了某种限制,只能使用8 GB的内存,尽管它“看到”整个16 GB?我该怎么做才能让JVM允许使用系统提供的尽可能多的内存?
-XX:+HeapDumpOnOutOfMemoryError
,并查看内存使用情况。 - tgdavies