当 运行 spring-kubernetes 活动处理器计数上的启动容器设置为主机 CPU,而不是容器的 k8s cpu 限制
When running spring-boot container on kubernetes active processor count is set with host CPU, not k8s cpu limit for container
我们运行 spring-在 kubernetes 上使用 bootBuildImage gradle 任务创建的启动容器。
我们在 k8s 启动时为 pods 提供 CPU 限制和内存限制。
我们使用:
- spring-引导版本 2.6.2
- docker 使用 gradle spring-引导插件 bootBuildImage 任务构建的映像
- spring-boot-admin 来管理我们的 spring-boot based deployments
- JDK 11(启用 blockhound)
- GCP GKE 中的
- 32 CPU 台主机
- 在开发中,我们将容器限制为 1 CPU 和 1Gig 内存
我们注意到,我们所有基于 spring-boot 的容器都已配置(即 nb 个线程),就好像 运行在 32 CPU 个实例上一样。
Docker 启动日志显示
Setting Active Processor Count to 32
[...]
Picked up JAVA_TOOL_OPTIONS: [...] -XX:ActiveProcessorCount=32
在 spring-boot-admin 中查看 Web 服务器(netty 用于反应,undertow 用于 servlet)配备线程池,就好像应用程序 运行ning on 32 CPUs 分配容器,即使容器被 k8s 限制为 1 CPU。
OTH 分配给 JVM 的内存是正确的。
我们如何确保活动 CPU 计数反映了 k8s CPU 限制?
提前致谢
根据您包含的输出,您似乎正在使用构建包(即 ./mvnw spring-boot:build-image
或 ./gradlew bootBuildImage
或 pack build
)。
在这种情况下,您可以将环境变量 JAVA_TOOL_OPTIONS
设置为 -XX:ActiveProcessorCount=x
以覆盖默认计算。默认计算将提取处理器总数(由 Go 的 runtime.NumCPU()
函数报告)。
旁注。您的要求似乎很合理,所以我 opened an issue 看看我们是否可以启用它来检测有限的 CPU 计数。
我们运行 spring-在 kubernetes 上使用 bootBuildImage gradle 任务创建的启动容器。 我们在 k8s 启动时为 pods 提供 CPU 限制和内存限制。 我们使用:
- spring-引导版本 2.6.2
- docker 使用 gradle spring-引导插件 bootBuildImage 任务构建的映像
- spring-boot-admin 来管理我们的 spring-boot based deployments
- JDK 11(启用 blockhound)
- GCP GKE 中的
- 32 CPU 台主机
- 在开发中,我们将容器限制为 1 CPU 和 1Gig 内存
我们注意到,我们所有基于 spring-boot 的容器都已配置(即 nb 个线程),就好像 运行在 32 CPU 个实例上一样。
Docker 启动日志显示
Setting Active Processor Count to 32
[...]
Picked up JAVA_TOOL_OPTIONS: [...] -XX:ActiveProcessorCount=32
在 spring-boot-admin 中查看 Web 服务器(netty 用于反应,undertow 用于 servlet)配备线程池,就好像应用程序 运行ning on 32 CPUs 分配容器,即使容器被 k8s 限制为 1 CPU。 OTH 分配给 JVM 的内存是正确的。
我们如何确保活动 CPU 计数反映了 k8s CPU 限制?
提前致谢
根据您包含的输出,您似乎正在使用构建包(即 ./mvnw spring-boot:build-image
或 ./gradlew bootBuildImage
或 pack build
)。
在这种情况下,您可以将环境变量 JAVA_TOOL_OPTIONS
设置为 -XX:ActiveProcessorCount=x
以覆盖默认计算。默认计算将提取处理器总数(由 Go 的 runtime.NumCPU()
函数报告)。
旁注。您的要求似乎很合理,所以我 opened an issue 看看我们是否可以启用它来检测有限的 CPU 计数。