Docker Java可用CPU核心数

时间:2016-11-27 19:51:32

标签: java docker

获取docker实例能够使用的CPU核心数量的安全方法是什么?

我知道这是普通的Java(也包括逻辑核心):

int cores = Runtime.getRuntime().availableProcessors();

当Java应用程序在docker镜像中运行时,这也是正常的,还是应该进行其他考虑?

2 个答案:

答案 0 :(得分:1)

取决于您的Java版本。较旧的Java版本会为您提供docker服务器上的内核数,而您可能想要的是容器可用的内核数。从8u131和Java 9开始,this is fixed

答案 1 :(得分:1)

在linux主机上,您可以读取/ sys / fs / cgroup / cpu,cpuacct / docker伪文件系统路径中存在的伪文件,该文件可跟踪cpu的使用情况。 在上面的路径中,查找名为要检查的容器的完整容器ID的目录,然后移入该目录。 然后,读取名为cpuacct.usage_percpu的文件,您可以看到容器每个核心消耗的所有cpu时间。 以上文件的绝对路径将如下所示:/sys/fs/cgroup/cpu,cpuacct/docker/f24b61ce690fe77f9eb0f029215e9491cc54642d686770d71218b4a0ada27ce3 在Java中,您只需读取这些伪文件,并针对每个CPU核心使用情况进行计算。