BSD / Darwin cpu stats

时间:2012-07-25 08:11:51

标签: cpu-usage bsd sysctl

所有的BSD都有一个通用的方法来获取CPU统计数据(内核,空闲,用户等的时间花费),就像Linux在/proc/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 个答案:

答案 0 :(得分:1)

不 - 那些东西不那么便携。虽然

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

恰好适用于上述设定并且有些可比性。

如果你需要简单但广泛的东西 - 我会考虑解析命令的正常运行时间(在幕后依赖于平台之间略有不同的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。