簡體   English   中英

在 kubernetes 上運行 spring-boot 容器時,使用主機 CPU 設置活動處理器計數,而不是容器的 k8s cpu 限制

[英]When running spring-boot container on kubernetes active processor count is set with host CPU, not k8s cpu limit for container

我們在 kubernetes 上運行使用 bootBuildImage gradle 任務創建的 spring-boot 容器。 我們在 k8s 啟動時為 Pod 提供 CPU 限制和 memory 限制。 我們用:

  • spring-boot 2.6.2版
  • spring-boot-admin 管理我們基於 spring-boot 的部署
  • JDK 11(啟用 blockhound)
  • GCP GKE 中的 32 個 CPU 主機
  • 在開發中,我們將容器限制為 1 個 CPU 和 1Gig 的 memory

我們注意到,我們所有基於 spring-boot 的容器都已配置(即 nb 個線程),就好像在 32 個 CPU 實例上運行一樣。

Docker 啟動日志顯示

將活動處理器計數設置為 32

[...]

拿起 JAVA_TOOL_OPTIONS: [...] -XX:ActiveProcessorCount=32

在 spring-boot-admin 中,參見 web 服務器(用於響應式的 netty,用於 servlet 的 undertow)配備了線程池,就好像應用程序在分配了 32 個 CPU 的容器上運行一樣,即使容器被 k8s 限制為 1 個 CPU。 OTH 分配給 JVM 的 memory 是正確的。

我們如何確保活動 CPU 計數反映 k8s CPU 限制?

提前致謝

根據您包含的 output ,您似乎正在使用構建包(即./mvnw spring-boot:build-image./gradlew bootBuildImagepack build )。

在這種情況下,您可以使用-XX:ActiveProcessorCount=x設置環境變量JAVA_TOOL_OPTIONS以覆蓋默認計算。 默認計算將提取處理器總數(由 Go 的runtime.NumCPU()函數報告)。

邊注。 您的要求似乎是合理的,所以我打開了一個問題,看看我們是否可以啟用它來檢測有限的 CPU 計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM