java - 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 容量。
解决方案
您好,在 Openshift 上,您可以设置请求和限制值。对于我的 Spring Boot 应用程序,我设置了最大允许的限制值,因为对于您的 Spring Boot JVM,您拥有更多 CPU 并且启动速度更快。然后,我将请求设置为足以满足我的应用程序标称流量。我在这篇文章中一步一步地写了我如何调整我的应用程序的大小。这应该回答你的问题。
推荐阅读
- javascript - 在 nedb 中添加的记录是单一的,但为什么 VUE 会多次存储相同的记录?
- javascript - 在字母大写算法中卡住了 - 建议?
- d3.js - D3 强制节点在左上角聚类
- html - 为什么卡片不在屏幕中央?
- javascript - 如何从一些 JSON 数据中求和一列?
- android-studio - ClasscastException 无法转换为线性布局或 Button.widget.button
- jmeter - 下面是我需要在jmeter中使用bean shell prepocessor动态传递的数据
- sql-server - 使用 BCP 实用程序将数据导入 SQL Server(导出带有错误记录的日志文件并继续插入正常记录)
- android - 更改 android studio 中的 textview 可见性
- node.js - passport-oauth2 授权 URL 和 TokenURL 实现