如何确定 Kubernetes 中的线程池大小

问题描述 投票:0回答:1

我想创建线程池

    ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads)

POD资源配置如下

     "limits": {
       "cpu": "800m",
       "memory": "1000Mi"
           },
    "requests": {
      "cpu": "23m",
      "memory": "288Mi"
   }
  

使用此配置,我不确定如何正确确定线程数。
我在哪里看到过这个方程

   Number of Threads = Number of Available CPU Cores * Target CPU Utilization * (1 +    Wait Time / Compute Time)

如果这个方程有效,那么我做了一些计算,假设目标 CPU 利用率为 80%,I/O 密集型应用程序的等待时间/计算时间为 10/1。 可用 CPU 核心数 = 800m,来自上述配置,我将其理解为 0.8 核心 所以计算就变成 = 0.8 * 0.8 * (1 + 10/1)

Java版本:11

那么这是否正确,如果不正确那么我如何确定线程数?

java multithreading kubernetes
1个回答
-1
投票

要计算或确定 kubernetes 中的线程池大小,您使用的公式是正确的,公式是

线程数 = 可用 CPU 核心数 * 目标 CPU 利用率 * (1 + 等待时间 / 计算时间)。

在计算之前我们需要考虑以下两点:

  1. Kubernetes 对 CPU 使用 millicore(或 millicpu)分辨率,1000m 等于 1 个 CPU 核心,800m 等于 0.8 个 CPU 核心。根据您的计算,上述配置中可用 CPU 核心数 = 800m,我将其理解为 0.8 核心。

  2. 如果您有计算密集型任务,那么我们的(等待时间/计算时间)= 1/10。如果您有 IO 繁重的任务并且我们的(等待时间/计算时间)= 10/1

基于以上要求,

如果您有计算密集型任务,那么

Number of Threads = 0.8* 0.8* (1 + 1/10) = 0.704

如果你有IO繁重的任务那么

Number of Threads = 0.8* 0.8* (1 + 10/1) = 7.04.

请参阅 Mucahit Kurt 的 Finding Ideal JVM Thread Pool Size With Kubernetes 了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.