如何使用java获取jvm进程对每个cpu核心的cpu使用率?

如何使用java获取jvm进程对每个cpu核心的cpu使用率?,java,cpu,performance,Java,Cpu,Performance,实际上,我正在使用java监控某个java进程的cpu使用情况。以下是我的问题: 首先,单个进程只能在1个或有限的cpu核上消耗cpu处理时间,或者它可以在每个cpu核上使用cpu时间,这有限制吗? 第二,如果我想为每个cpu核心监控某个java进程的cpu使用情况,我该怎么做? 我更喜欢使用纯java,而不是本机方法来处理它。对于操作系统来说,一个线程(我认为这就是您所说的“java进程”)基本上不能同时在多个“处理器”(可能是也可能不是指一个物理核心——见下文)上使用CPU 通常,每当一个给

实际上,我正在使用java监控某个java进程的cpu使用情况。以下是我的问题: 首先,单个进程只能在1个或有限的cpu核上消耗cpu处理时间,或者它可以在每个cpu核上使用cpu时间,这有限制吗? 第二,如果我想为每个cpu核心监控某个java进程的cpu使用情况,我该怎么做?
我更喜欢使用纯java,而不是本机方法来处理它。

对于操作系统来说,一个线程(我认为这就是您所说的“java进程”)基本上不能同时在多个“处理器”(可能是也可能不是指一个物理核心——见下文)上使用CPU

通常,每当一个给定的线程得到“运行时的转折点”,Windows(我假设其他操作系统)就会尝试将一个给定的线程调度到它上次运行的同一个“处理器”上

然而,由于超线程CPU实际上为操作系统提供了多个“处理器”,实际上是一个单核物理核,因此情况变得复杂。在这种情况下,实际上是CPU本身在任何时候在给定内核的哪个组件上运行哪个线程的哪个指令之间进行切换。(例如,当加载/存储单元从内存中获取线程2指令的数据时,内核的算术单元可能正在执行线程1的算术指令,等等。)

因此,考虑到这种情况的复杂性,即使你可以得到每个核心的测量值,我也不完全确定你会赋予它们什么有用的意义


另外,如果你允许使用这个插件,我不知道我几年前写的这个插件是否有用。我应该说,我是在Windows 7或最新的Intel Core CPU发布之前编写的,可能会有一到两次相关信息的更新(特别是,我没有讨论可变内核速度的问题以及这会如何影响调度)。

对于操作系统,单线程(我假设这就是您所说的“Java进程”)本质上不能同时在多个“处理器”上使用CPU(这可能意味着物理核心,也可能不意味着物理核心,见下文)

通常,每当一个给定的线程得到“运行时的转折点”,Windows(我假设其他操作系统)就会尝试将一个给定的线程调度到它上次运行的同一个“处理器”上

然而,由于超线程CPU实际上为操作系统提供了多个“处理器”,实际上是一个单核物理内核,因此情况变得复杂。在这种情况下,实际上是CPU本身在给定内核的哪个组件上运行哪个线程的哪个指令之间进行切换。(例如,当加载/存储单元从内存中获取线程2指令的数据时,内核的算术单元可能正在执行线程1的算术指令,等等。)

因此,考虑到这种情况的复杂性,即使你可以得到每个核心的测量值,我也不完全确定你会赋予它们什么有用的意义


另外,如果您允许插入,我不知道几年前我写的这篇文章是否有用。我应该说我是在Windows 7或最新Intel Core CPU发布之前写的,可能会有一两次相关信息的更新(特别是,我没有讨论可变内核速度的问题以及这会如何影响调度)。

可能重复@user998899:您可以通过设置Java进程的“CPU相关性”将Java进程限制在某些内核上(我在Linux和Windows上做过,从未在OS X上尝试过)。但遗憾的是,Java无法从本机执行此操作。@user988052我只想执行监视工作,设置CPU关联实际上不仅仅是监视…@user998899:这不是一个答案,因此是注释而不是答案。但您特别写道:“单个进程只能在1个或有限的cpu核上消耗cpu处理时间有限制吗”[sic]因此,据我理解这句话,我想您可能有兴趣知道,确实有一种方法可以让Java进程“只在1个核上消耗处理时间”[sic]。可能与@user998899重复:您可以通过设置Java进程的“CPU关联性”将Java进程限制为某些内核(我在Linux和Windows上做过,从未在OS X上尝试过)。但遗憾的是,Java无法从本机执行此操作。@user988052我只想执行监视工作,设置CPU关联实际上不仅仅是监视…@user998899:这不是一个答案,因此是注释而不是答案。但您特别写道:单个进程只能在1个或有限的cpu核上消耗cpu处理时间有限制吗?“[sic]因此,就我理解这句话而言,我想您可能有兴趣知道,确实有一种方法可以让Java进程“只在1个核上消耗处理时间”[sic]。