如何找出我的进程ID正在哪个物理CPU上运行?

时间:2012-01-31 17:27:18

标签: java c++ unix solaris

我的一个服务器中有两个物理CPU。我看到他们两个都有8个与之相关的虚拟处理器。我有一些问题。

  1. 如何找到与我的进程ID关联的作业在哪个CPU上运行?
  2. 我的工作是CPU广泛的,所以它可以同时使用CPU及其虚拟处理器,还是可以在CPU和虚拟处理器之一上运行?
  3. 如果允许作业在两个CPU及其虚拟处理器上运行,可能会导致性能下降,因为数据将在它们之间进行交换。
  4. 我试图通过使用mpstat找到与CPU利用率相关的信息,其中“wt”列给出“读/写操作期间CPU的理想时间”,但总是取0值。你能否建议我可以监控我的进程ID的CPU利用率的任何其他命令?我见过top,mpstat。从procstat使用和分析可读形式的统计数据我该怎么办?

1 个答案:

答案 0 :(得分:3)

  

如何找到与我的进程ID关联的作业在哪个CPU上运行?

您只能使用JNA或JNI执行此操作。

  

我的工作是CPU广泛的,所以它可以同时使用CPU及其虚拟处理器,也可以在其中一个CPU和虚拟处理器上运行。

如果您只有一个线程,它将只使用一个逻辑线程。如果你有更多繁忙的线程,它可以使用更多的逻辑线程(可能是你所有的CPU)

  

如果允许作业在两个CPU及其虚拟处理器上运行,可能导致性能下降,因为数据将在它们之间进行。

  

我试图通过使用mpstat找到与CPU利用率相关的信息,其中“wt”coloumn给出“读/写操作期间CPU的理想时间”但总是取0值。

读/写延迟是IO设备,而不是CPU之间。

  

你能否建议任何其他命令来监控我的进程ID的CPU利用率。我见过top,mpstat。

他们是你能得到的最好的。

  

使用和分析来自procstat的可读形式的统计数据我该怎么办?

假设您使用过商业分析器,它的运行效率与您的运行效率相同......

您需要创建微基准测试,以了解如何在系统上运行一个或多个线程。这将使您了解如何进行缩放,如果不进行缩放,则必须进行进一步分析以确定原因。您将无法使用分析工具确定这一点。

编辑:如果您想了解如何使用线程关联,JNI或JNA的示例,您可以尝试https://github.com/peter-lawrey/Java-Thread-Affinity

注意:它适用于Linux。