部署多个Spring应用程序实例

时间:2019-11-05 18:04:39

标签: java spring spring-boot deployment web-deployment

我需要部署同一spring应用程序的多个实例。

我实际上是使用docker作为实例的容器,每个实例有1个容器。

但是,注意到一个容器消耗了500mb的空间,这对我来说是很大的,因为我需要我的VPS来捕获尽可能多的实例,说实话,这些容器仅用于JVM,而没有其他用途。为一个简单的JVM实例分配一个完整的虚拟环境会浪费大量的内存,而我一点也不用。

我需要的更像是一个工具,可以帮助我管理实例(如果由于某些原因导致进程被终止,则自动启动;如果已经开发了新版本的应用,则可以轻松更新实例;通过命令行管理实例调试命令或其他命令。)就像我可以使用Docker一样,但是没有一个过于“贪婪”的整个虚拟化环境

顺便说一句,我从OVH Cloud Services获得了VPS,该公司不提供任何类似spring的部署服务。我正在开发传统的Ubuntu 18.04。

预先感谢

1 个答案:

答案 0 :(得分:1)

您应该从堆栈的底部到顶部进行处理。我将尝试回答每个主题,但建议您将其分为几个问题,以便人们可以为每个问题提供更详细的答案。

我只给您一个概述,以便您有一个起点。

JVM内存限制

首先,通过为JVM设置一致的限制来控制内存分配。您可以通过设置“最大堆大小”和“最大元空间”大小(Java 8)来实现。

您可以通过附加标志 -Xmx 来设置最大堆大小。 -Xmx1G 将堆大小限制为1 GB。

可以使用 -MaxMetaspaceSize 设置元空间。元空间是Java 8中引入的。如果您使用的是Java 6或7,则应查看PermGen。

容器限制

您还可以通过将-m标志附加到docker run命令来设置容器的最大内存。您可以在此处查看docker的文档:https://docs.docker.com/config/containers/resource_constraints/

容器管理

这应该有自己的详细答案。首先,Spring Framework与您要实现的目标无关。它无法解决自动重启或类似问题。

您正在寻找的是容器管理工具。您可以看看docker swarm,portainer或kubernetes。

它们将允许您启动同一服务的多个实例,而无需在代码级进行任何更改。

要实现快速而肮脏的实施,您可以使用docker swarm,它毫无疑问,并且可以与docker容器无缝集成。