有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Springboot 503服务不可用

我为这篇长篇大论事先道歉

背景:

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

angular应用程序是通过一个nginx容器静态托管的,springboot是作为一个jar运行的,命令是“java-jarapp”。罐子'。除了端口,我没有修改和Docker字段,因此Docker的所有其他选项都是默认选项

问题:

当我启动所有三个容器并尝试对它们运行量角器e2e测试时,我将偶尔收到后端不可用的503服务。我有一套12个测试,所有测试都按顺序运行。在执行测试之前,我会等到所有容器都装满了,并且它会在12个测试中的任意一个测试中随机失败。测试失败后,我将手动运行测试步骤并尝试复制,但它总是通过。当我在docker容器中以gradle springboot的形式运行后端时,我没有遇到任何问题。因此,只有当我尝试对停靠的jar运行自动测试时,问题才会出现

我已经在SpringWeb日志上增加了从调试到跟踪的日志记录,并且一切都正常

我认为这是一个记忆问题。运行javajar时会出现java堆问题,还是会导致对后端或数据库的api调用过载?这可能与为mongo和nginx容器分配大量内存有关

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


共 (1) 个答案

  1. # 1 楼答案

    你真的分析过内存使用情况吗?如果是内存问题,这可能会有帮助:

    众所周知,mongo非常积极地分配内存,尤其是wired tiger存储引擎只会消耗内存。此外,在容器中,它不知道还有其他人在使用内存。你可能想告诉它不要那么贪婪:

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

    另外,限制每个容器的资源也是一个好主意(特别是当它们在同一台机器上竞争时):

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

    希望这有帮助