2012-01-31 49 views
2

我有一個我的服務器中有兩個物理CPU。我看到他們都有8個虛擬處理器與之相關聯。我有幾個查詢。如何找出我的進程ID在哪個物理CPU上運行?

  1. 如何找到與我的進程相關的作業ID正在哪個CPU上運行?
  2. 我的工作是CPU廣泛的,它既可以使用CPU和它們的虛擬處理器,也可以使用CPU和虛擬處理器之一運行?
  3. 如果作業被允許在CPU和它們的虛擬處理器上運行,可能導致性能下降,因爲數據將在它們之間交換。
  4. 我試圖通過使用mpstat找到與CPU利用率有關的信息,其中「wt」列給出了「讀/寫操作期間CPU的理想時間」,但總是提取我0值。你能建議任何其他命令,通過它我可以監視我的進程ID的CPU利用率?我已經看過頂部,mpstat。從procstat以可讀形式使用和分析統計信息我可以做什麼?

回答

3

如何找到與我的進程ID相關的作業正在哪個CPU上運行?

您只能用JNA或JNI來做到這一點。

我的工作是CPU廣泛,因此它可以同時使用CPU和他們的虛擬處理器或就會對CPU和虛擬處理器的一個運行。

如果您只有一個線程,它將只使用一個邏輯線程。如果您有更多的線程這是繁忙它可以使用邏輯線程(可能是所有的CPU)

如果作業被允許在兩個CPU和他們的虛擬處理器上運行,可導致性能下降,否則數據將在他們之間被開除。

是的。

我試圖通過使用mpstat找到CPU利用率相關的信息,其中「wt」coloumn給出了「讀/寫操作期間CPU的理想時間」,但總是提取我0值。

讀/寫延遲是IO設備,而不是CPU之間。

你能推薦任何其他的命令,通過它我可以監視我的進程ID的CPU利用率。我已經看過頂部,mpstat。

他們是最好的,你可以得到。

用於從procstat以可讀形式使用和分析統計信息我該怎麼辦?

假設你已經使用了一個商業化的分析器,它的運行效率可以達到......

您需要創建微型基準測試以瞭解如何在系統上使用一個或多個線程運行。這會給你一個如何擴展的想法,如果它不擴展,你必須做進一步的分析來確定原因。您將無法使用分析工具來確定這一點。

編輯:如果你想如何使用線程關聯的例子,JNI或JNA你可以嘗試https://github.com/peter-lawrey/Java-Thread-Affinity

注:它適用於Linux操作系統。

+0

是否有一些文件或鏈接我可以用來知道如何實際使用JNI,因爲我有C++代碼。我也可以強制我的操作系統只使用其中一個物理CPU而不是兩個,如果是的話,那麼該怎麼辦? – Invictus 2012-01-31 17:44:24

+0

在Linux中,您可以使用taskset。 – 2012-01-31 17:47:46

+0

所以給命令taskset -c 0,1,2,3,4,5,6,7然後運行我的工作將確保只有這8個預處理器被使用 – Invictus 2012-01-31 17:55:32

相關問題