Springboot 503服务不可用

时间:2018-07-30 19:24:11

标签: java angular mongodb docker spring-boot

我很抱歉长时间写信!

背景:

我正在使用的服务的前端有角度7,springboot 2.0.0.RELEASE的后端,以及MongoDB(最新的docker版本)的数据库层。应用程序的所有3层都在同一RHEL机器上的自己的docker容器中运行,但它们都在同一docker网络上。

Angular应用通过nginx容器静态托管,并且springboot使用该命令'java -jar app.jar'作为jar运行。除了端口,我没有更改Docker字段,因此docker的所有其他选项均为默认选项。

问题:

当我启动所有三个容器并尝试对其进行量角器e2e测试时,我偶尔会从后端收到503服务不可用。我有12个测试套件,所有测试按顺序运行。我等待所有容器都装满,然后再执行测试,否则它将在12个测试中的任何一个上随机失败。测试失败后,我将手动执行测试步骤并尝试复制,但是它始终会通过。当我在docker容器中将后端作为gradle springboot运行时,我没有遇到任何问题。因此,仅当我尝试针对dockerized jar运行自动化测试时,问题才出现。

我已经在春季Web日志中将日志记录从DEBUG增加到TRACE,一切都可以正常进行。

我认为这是一个内存问题。运行Java jar可能是Java堆问题,还是后端或数据库的api调用过载?这可能与为mongo和nginx容器分配大量内存有关。

解决此问题的任何信息或替代假设将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您是否真的分析了内存使用情况?如果是内存问题,这可能会有所帮助:

众所周知

mongo分配内存非常积极,尤其是有线Tiger存储引擎只是在消耗内存。同样,在容器中,它不知道其他人正在使用内存。您可能要告诉它不要那么贪心:

https://docs.mongodb.com/manual/core/wiredtiger/#memory-use

同样,最好限制每个容器的资源(尤其是如果它们在同一台机器上竞争):

https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory

希望这会有所帮助