我们有一个在Java 8上运行的企业应用程序.部署环境是构建的&;通过Bitbucket管道更新.我有一个graphic showing the high-level architecture of the environment.除了一些特定于应用程序的环境变量外,我们有两个运行相同配置的应用程序服务器.
直到一周前,在成功运行管道后,其中一台服务器上的2个应用程序实例停止工作,出现以下错误:
There is insufficient memory for the Java Runtime Environment to continue.
Cannot create GC thread. Out of system resources.
这两个实例在另一台服务器上都工作正常.相反,容器无法在此服务器上启动.
已try 的解决方案
错误伴随以下信息:
可能的原因:
可能的解决方案:
- 减少系统上的内存负载
- 增加物理内存或交换空间
- 判断交换备份存储是否已满
- 减少Java堆大小(-Xmx/-Xms)
- 减少Java线程数
- 减少Java线程堆栈大小(-Xss)
- 使用-XX:ReservedCodeCacheSize设置更大的代码缓存=
我们已经try :
- 添加更多交换内存.服务器有8GB的RAM,而我们try 了从4GB到9GB的交换.
- 使用堆大小Xms&;Xmx从128m到4096m.
- 将此服务器上的RAM增加到16GB,而另一台工作的服务器仍在8GB上.
以下是内存和;掉期消费看起来像:
free -mh
total used free shared buff/cache available
Mem: 15Gi 378Mi 12Gi 1.0Mi 2.9Gi 14Gi
Swap: 9Gi 0B 9Gi
我有几个相关工件的链接.这些包括the failing server和the operational server上的complete docker logs
output和docker info
的输出.
这就是docker ps -a
带给我们的:
:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d29747bf2ad3 :a7608a838625ae945bd0a06fea9451f8bf11ebe4 "catalina.sh run" 10 hours ago Exited (1) 10 hours ago jbbatch
0951b6eb5d42 :a7608a838625ae945bd0a06fea9451f8bf11ebe4 "catalina.sh run" 10 hours ago Exited (1) 10 hours ago jbapp
我们现在没有主意了,因为我们已经try 了几乎所有关于堆栈溢出的解决方案.我们错过了什么?