0

是否所有的 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),所以任何帮助都将不胜感激。

4

1 回答 1

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

那是非常跨平台的 - 并且具有非常相似的语义。

如果这还不够好 - 您可以做的是确保系统运行一个 SNMP 代理,该代理会公开主机资源 MIB。这为您提供了一种简单的平台独立方式来获取负载。如果您真的想从您的代码中执行此操作 - 考虑从 net-snmp 获取这段代码 - 因为它具有适用于许多平台的各种风格的 /proc 和 sysctl。

于 2012-07-25T09:39:30.690 回答