首页 > 解决方案 > OpenShift 上 SpringBoot 和 Vert.X 应用程序的推荐 Container/POD CPU 大小

问题描述

我们使用 OpenShift 3.6 作为我们的 Cloud PaaS,我正在测试连接到 Couchbase 集群的 Spring Boot 和 Vert.X 应用程序。可用的默认 POD 大小为 250millicore X 1 GB、400millicore X 1.5 GB 和 1core X 3 GB。

当我尝试部署应用程序(Spring Boot / Vert.X)时,我观察到 250millicore POD 的引导时间 > 2-3 分钟,而 1Core POD 的引导时间为 45 秒。因此,Couchbase 引导程序在 250millicore POD 上花费了大量时间,这违反了其默认的连接超时并导致应用程序崩溃。

如果我增加超时时间,应用程序会启动,但是在执行任何事务时它会很缓慢。我可以使用 1 X 3 POD,但会增加成本。但是,我似乎对使用的内存没有任何问题。

Q1) JVM 在启动期间对 CPU 的依赖是什么(旋转新线程、在内存中处理、类加载等)。

Q2) 我知道 JVM 在启动期间是资源密集型的,但是对于应用程序在其上运行良好的堆栈是否有最小推荐的 POD 大小

Q3)如果更高的 POD 大小是 Java 应用程序/JVM 的默认要求,它是否违背了能够将其用作应该是轻量级的微服务的概念。

我已经调整了 JVM 参数、Xmx、Xms 和不同的 GC 组合,如 G1GC、ParallelGc 等(看看它是否会以不同的方式发挥作用),但仍然经历相同的引导时间。唯一似乎有影响的是 CPU 大小。

Spring Boot v2.1 OpenShift v3.6 Couchbase v5.1 Java v1.8.161 CB SDK 2.5.7

附件是我的本地机器(i5 - 4 核)上应用程序的 VisualVM 快照, 这似乎在应用程序生命周期的初始阶段占用了大约 30% 的 CPU 容量。

标签: javadockerjvmkubernetesopenshift

解决方案


您好,在 Openshift 上,您可以设置请求和限制值。对于我的 Spring Boot 应用程序,我设置了最大允许的限制值,因为对于您的 Spring Boot JVM,您拥有更多 CPU 并且启动速度更快。然后,我将请求设置为足以满足我的应用程序标称流量。我在这篇文章中一步一步地写了我如何调整我的应用程序的大小。这应该回答你的问题。


推荐阅读