2012-07-25 71 views
0

所有的BSD是否都有一個通用的方式來獲得CPU統計信息(在內核,空閒,用戶等方面的時間花費),就像Linux在第一行/proc/stats中的那樣?BSD/Darwin cpu stats

我試圖檢測負載下的系統,並且當它處於活動狀態(超過某個閾值)時不執行計算。我已經想出瞭如何在Windows/Linux上做到這一點。

我想我需要以某種方式使用sysctl。我發現這一點:

http://osdir.com/ml/darwin-kernel/2009-06/msg00036.html

這是跨平臺?我想特別針對這些BSD系統:

  • 的Mac OS 10.6+
  • FreeBSD的8+
  • OpenBSD的5+

我只是稍微熟悉的BSD系統(我作爲一名少年在FreeBSD上玩了一下),所以任何幫助將不勝感激。

回答

1

不 - 這些東西不是那麼便於攜帶。雖然

 sysctl vm.loadavg 
     vm.loadavg: { 0.98 1.39 1.50 } 

恰好適用於上述設置,並有點可比。

如果你需要一些簡單而廣泛的 - 我會考慮uptime命令的解析(在幕後依賴於sysctl項是平臺之間微妙的不同) - 並提取負載數字:

 uptime 
     11:38AM up 18 days, 15:50, 2 users, load averages: 0.04, 0.01, 0.00 

這是一個很漂亮的跨平臺 - 並且具有非常相似的語義。

如果這還不夠好 - 您可以做的就是確保系統運行公開主機資源MIB的SNMP代理。這可以讓你獲得一個簡單的平臺獨立獲取負載的方式。如果你真的想從你的代碼中做到這一點 - 考慮從net-snmp獲取這些代碼 - 因爲它擁有許多平臺的各種風格的/ proc和sysctl。

+0

我想我會堅持loadavg。我正在寫一些必須在Windows上工作的東西,而且它沒有loadavg概念(至少不是簡單的)。我想我會這樣做,根據CPU的使用情況爲Windows打入一些東西,直到我有一個令人信服的理由更加準確。 – tjameson 2012-07-26 04:08:21