cod*_*ith 7 java performance spring tomcat docker
我想知道 Docker 解决方案是否比我当前的 Tomcat 部署更快、内存效率更高。我将解释这两种解决方案。
当前:我有一个部署了大约 20 个 WAR 的 Tomcat 服务器。WAR 是 Spring Boot 应用程序。它也占用大量内存、启动时间和金钱。
docker 替代方案:我正在考虑的替代方案是带有 20 个 docker 容器的 docker 主机,每个应用程序一个。Spring 似乎建议在 JDK 映像上使用 JAR。
现在,Docker 或一般的容器化是否可以提高内存和速度?
我期待的一项改进是应用程序可以并行启动。这有望加快启动时间(假设是多核硬件)。我就在这里吗?
其次,我想知道哪种方法可以最有效地处理内存。当我有多个 WAR 共享完全相同的依赖项时会发生什么?Tomcat 会为此重用依赖内存吗?Docker 会吗?
内存(以及可能的 CPU)效率是有争议的,并且可能需要测量。让我提供一些见解。
假设您创建了 20 个容器,每个容器对应您想要运行的一场战争。那时内存中有 20 个不同的 JVM。根据它们是否来自相同的容器映像或不同的容器映像,操作系统会识别它们是相同的,并且可以共享代码库。因此,这取决于您是否将战争烘焙到容器镜像中,或者只有一个镜像并在运行时挂载战争。
永久代空间、堆或其他内存区域怎么样?我怀疑操作系统是否可以在此处的进程之间共享很多内容。而且 JVM 无法在其级别上共享,因为 docker 容器隔离不允许它们相互通信。因此 JVM 级别的共享内存丢失了。
这样,每个 JVM 都会启动并运行热点代码位置的 JIT,并且应用程序之间无法使用协同作用。如果内存中的代码库更大,CPU 也必须在进程之间跳转更多,从而更频繁地使缓存失效。
总而言之,我相信对您的设置进行 Docker 化是对应用程序隔离的改进。您可以更轻松地安装/卸载您的东西,并且一个运行严重破坏的应用程序不会影响其他应用程序。但就性能而言,您应该注意到执行时间较短和内存使用量较高。到什么程度可能只能进行基准测试。
| 归档时间: | 
 | 
| 查看次数: | 818 次 | 
| 最近记录: |