【问题标题】:Minimum resource to run a Spring Boot app运行 Spring Boot 应用程序的最小资源
【发布时间】:2021-09-26 12:55:52
【问题描述】:

我刚刚开始测试将我的 spring boot webapp 部署到 AWS 上。我目前有一个运行 Ubuntu 服务器的 t2.micro (1vcpu/1gb),我已经使用 mvn clean install 将我的应用程序打包到一个 fat jar 中。

tomcat 服务器最初部署良好,我可以远程访问我的 API,但是,几个小时后(未能准确计时),服务器似乎自行停止。我登录到实例,java 进程似乎已自行停止。

我用来运行jar的命令是典型的java -jar xxxxx.jar。

该应用有 2 个实体、2 个控制器、3 个服务。没什么复杂的。

目前仍在使用 h2 作为 db,因为我只是在测试一些东西,但是 db 初始化为空且没有数据。

根据我在其他线程上阅读的内容,这听起来像是一个 OOM 问题。贡献因素是 h2 db,它是一个 in-mem db。

但是,它是一个非常小的应用程序,如前所述,数据库一开始是空的。所以怀疑它是否消耗了超过 100mbs 的那么多 RAM。空闲服务器消耗约 23% 的 RAM,缓存约 500mb,空闲约 300mb。

此外,我无法在服务器上找到日志说它由于 OOM 而杀死了 java 进程。 (我在 var/logs/dmesg 中搜索过)

我还没有尝试将它部署到更大的东西上,但想在走错方向之前获得一些见解。

如果添加上下文,将发布我的 java 代码。提前致谢。

【问题讨论】:

  • 您是否只是通过 SSH 登录并通过 SSH 控制台会话启动应用程序?如果是这样,会话可能会超时并终止进程。您应该考虑将其作为后台服务运行。应用程序当前是否配置为登录到控制台?如果是这样,您应该在启动应用程序时将控制台输出重定向到日志文件,以便稍后查看 Spring Boot 日志以了解诸如 OOM 错误之类的内容。您还应该在 CloudWatch 中检查实例的指标,看看您是否耗尽了 t2 服务器的 CPU 积分或其他任何东西。
  • 是的,我确实是。将研究将其作为后台服务运行,并将日志配置为文件。谢谢你的建议。将保持此线程发布。

标签: amazon-web-services spring-boot amazon-ec2 ubuntu-server


【解决方案1】:

为确保您的 Spring BOOT 应用程序正常工作,您可以构建 FAT JAR,然后尝试使用 Elastic Beanstlak - 它将应用程序放到 EC2 实例上。有关信息,请参阅此 AWS 教程。它使用各种 AWS 服务,包括 DynamoDB。但是你可以跳过代码部分并阅读部署部分:

Creating the DynamoDB web application item tracker

查看也需要设置的环境变量。

【讨论】:

  • 感谢您的提示。当我在我的 EC2 实例上手动部署该应用程序时,它实际上可以工作。只是它似乎在一段时间后停止了。我会尝试上面 Mark 的建议,看看问题是否是由于 SSH 会话造成的。
  • @fabbbles 是与 SSH 相关的问题吗?我将很快在 EC2 上部署我自己的 Spring Boot 应用程序,我很想知道是什么导致了您的问题。
  • @Maurice,问题是由于应用程序在前台运行,并且在一段时间后被终止。我使用 nohup 命令在后台启动 java 进程,之后就很好了。 stackoverflow.com/questions/10408816/…
猜你喜欢
  • 2015-07-17
  • 2018-05-18
  • 2016-12-27
  • 2023-03-16
  • 2020-10-26
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多