获取docker实例能够使用的CPU核心数量的安全方法是什么?
我知道这是普通的Java(也包括逻辑核心):
int cores = Runtime.getRuntime().availableProcessors();
当Java应用程序在docker镜像中运行时,这也是正常的,还是应该进行其他考虑?
答案 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核心使用情况进行计算。