运行 Spring Boot 应用程序所需的最少资源

问题描述

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

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

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

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

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

从我在其他线程上读到的内容来看,这听起来像是一个 OOM 问题。促成因素是 h2 db,它是一个 in-mem db。

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

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

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

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

解决方法

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

Creating the DynamoDB web application item tracker

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