所有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),所以任何帮助都将不胜感激。
不——这些东西不是那么便携。尽管
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的各种风格。