我需要部署同一spring应用程序的多个实例。
我实际上是使用docker作为实例的容器,每个实例有1个容器。
但是,注意到一个容器消耗了500mb的空间,这对我来说是很大的,因为我需要我的VPS来捕获尽可能多的实例,说实话,这些容器仅用于JVM,而没有其他用途。为一个简单的JVM实例分配一个完整的虚拟环境会浪费大量的内存,而我一点也不用。
我需要的更像是一个工具,可以帮助我管理实例(如果由于某些原因导致进程被终止,则自动启动;如果已经开发了新版本的应用,则可以轻松更新实例;通过命令行管理实例调试命令或其他命令。)就像我可以使用Docker一样,但是没有一个过于“贪婪”的整个虚拟化环境
顺便说一句,我从OVH Cloud Services获得了VPS,该公司不提供任何类似spring的部署服务。我正在开发传统的Ubuntu 18.04。
预先感谢
答案 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容器无缝集成。