我们在kubernetes上运行使用bootBuildImage gradle任务创建的Spring Boot容器。我们在k8s启动时为pod提供CPU限制和内存限制。我们使用:
我们注意到我们所有基于Spring Boot的容器都是预配的(即nb个线程),就好像在32个CPU实例上运行一样。
码头工人启动日志显示
将活动处理器计数设置为 32
[...]
JAVA_TOOL_OPTIONS:[…]-XX: ActiveProcessorCount=32
在Spring启动时,使用see web服务器的管理员(netty表示反应式,underflow表示servlet)配备了线程池,就好像应用程序在32个CPU分配的容器上运行一样,即使容器被限制为1个CPU乘以k8s。OTH分配给JVM的内存是正确的。
我们如何确保活动 CPU 计数反映 k8s CPU 限制?
提前感谢
根据您包含的输出,看起来您正在使用构建包(即./mvnw spfling-引导:构建图像
或./gradlew bootBuildImage
或包构建
)。
在这种情况下,您可以使用-XX: ActiveProcessorCount=x
设置env变量JAVA_TOOL_OPTIONS
来覆盖默认计算。默认计算将拉取处理器总数(如Go的runtime. NumCPU()
函数所报告的)。
旁注。你的要求似乎很合理,所以我打开了一个问题,看看我们是否可以启用它来检测有限的CPU计数。