我Runtime.getRuntime.availableProcessors()
用来创建我的线程池。在我们自己的物理数据中心上,它曾经返回的 cpu 数为 8,并且从未更改过。然后每次有请求(数据密集型)进入时,我们使用相同的可用处理器 API 对数据进行分区,并且该线程池的每个线程都处理其中一个分区。
然而,最近我们切换到 AWS(和 Docker 作为容器),每次请求(数据密集型)来,并且想要对数据进行分区并因此调用该 API 时,它都会返回一个不同的数字。例子:
使用的分区数:[X = 12] [Y= 15] [Z = 12] [W = 5] [Q = 15] [P = 3]
情况不妙。如果在我们创建线程池的时候可用处理器是 3,而当请求进来并且我们对数据进行分区时,它是 15。
我知道 API 文档说:
返回 Java 虚拟机可用的处理器数量。
此值可能会在虚拟机的特定调用期间发生变化。因此,对可用处理器数量敏感的应用程序应偶尔轮询此属性并适当调整其资源使用情况。
但我的问题是
- 为什么它以前没有改变(总是返回 8),为什么它在 AWS 上变化如此之大,以及是否有办法解决它?
- 如果没有办法修复它,我该如何修改应用程序以确保线程池和分区兼容?
谢谢