Docker Java可用CPU内核数

Docker Java可用CPU内核数,java,docker,Java,Docker,获取docker实例能够使用的CPU内核数量的安全方法是什么 我知道在普通Java中是这样的(其中还包括逻辑内核): 当Java应用程序在docker映像中运行时,这也可以吗?或者我应该做额外的考虑吗?取决于您的Java版本。旧版本的Java会提供docker服务器上的内核数量,而您可能需要的是容器可用的数量。在linux主机上,您可以从8u131和Java 9中读取路径/sys/fs/cgroup/cpu、cpuacct/docker伪文件系统中的伪文件,该文件系统跟踪cpu使用情况。 在上面

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

我知道在普通Java中是这样的(其中还包括逻辑内核):


当Java应用程序在docker映像中运行时,这也可以吗?或者我应该做额外的考虑吗?

取决于您的Java版本。旧版本的Java会提供docker服务器上的内核数量,而您可能需要的是容器可用的数量。在linux主机上,您可以从8u131和Java 9中读取路径/sys/fs/cgroup/cpu、cpuacct/docker伪文件系统中的伪文件,该文件系统跟踪cpu使用情况。 在上面的路径中,查找名为要检查的容器的完整容器ID的目录,并将其移动到该目录中。 然后读取名为cpuacct.usage_perpu的文件,您可以看到容器在每个核心上消耗的所有cpu时间。 上述文件的绝对路径如下
/sys/fs/cgroup/cpu、cpuacct/docker/f24b61ce690fe77f9eb0f029215e9491cc542d686770d71218b4a0ada27ce3

在java中,您只需读取这些伪文件并计算每个cpu核心的使用情况。

这是正确的答案,可以使用jshell轻松地进行测试。只需进入一个停靠的
JShell
,使用和不使用
——CPU 1
,然后运行
Runtime.getRuntime().availableProcessors()。从命令行:
dockerrun-it--rm--cpus1openjdk:11jdk
int cores = Runtime.getRuntime().availableProcessors();