如何使用 node.js 获取系统统计信息
Posted
技术标签:
【中文标题】如何使用 node.js 获取系统统计信息【英文标题】:How to get system statistics with node.js 【发布时间】:2012-05-07 03:14:49 【问题描述】:我有一个分布式服务器系统。
有很多服务器,通过 PubSub 进行协调。 它们都连接到统计服务器。 服务器每分钟将其统计信息发送到统计服务器(处理了多少请求、平均时间等)。
所以...在此统计消息中包含系统状态会很好。 我需要 CPU 负载(每个内核)和可用内存量。
我做了一个小变通,决定用“exec”调用一个linux命令,解析答案并形成一个JSON数据进行发送。
但是我怎样才能从命令行获取这些数据呢?
在 Mac OS X 上,我可以使用 geektool 脚本轻松获得所需的一切,但在 linux (debian) 上它们不起作用。
例如:
top -l 1 | awk '/PhysMem/ print "Used: " $8 " Free: " $10'
在 Mac OS X Lion 上我得到:
Used: 3246M Free: 848M
而且只是 debian 中的一个错误...
【问题讨论】:
你试过 Dtrace 吗? mcavage.github.com/presentations/dtrace_conf_2012-04-03 github.com/sebhildebrandt/systeminformation ***.com/questions/26208454/… 【参考方案1】:在 Linux 上,您可以使用 /proc。请参阅here 获取一系列命令行示例以读取统计信息。
最好直接从 Node 读取文件,使用fs.readFile()
更新: 还有可能更好的OS API。 用法示例:Convert the output of os.cpus() in Node.js to percentage
【讨论】:
非常感谢!找到了获得可用内存量的方法,但我仍然无法在每个内核上获得 CPU 负载。并且... /proc/loadavg 返回零。正常吗? 使用 os.loadavg();.它将以数组的形式返回服务器在 1 分钟、5 分钟和 15 分钟内的总负载。【参考方案2】:恕我直言,最好的选择是使用systeminformation 模块,
您可以在其中检索具有 Linux、macOS、部分 Windows 和 FreeBSD 支持的详细硬件、系统和操作系统信息。
例如获取CPU信息:
const si = require('systeminformation');
// callback style
si.cpu(function(data)
console.log('CPU-Information:');
console.log(data);
);
// promises style - new in version 3
si.cpu()
.then(data => console.log(data))
.catch(error => console.error(error));
// full async / await example (node >= 7.6)
async function cpu()
try
const data = await si.cpu();
console.log(data)
catch (e)
console.log(e)
此示例将产生以下结果:
manufacturer: 'Intel®',
brand: 'Core™ i5-3317U',
vendor: 'GenuineIntel',
family: '6',
model: '58',
stepping: '9',
revision: '',
voltage: '',
speed: '1.70',
speedmin: '0.80',
speedmax: '2.60',
cores: 4,
cache: l1d: 32768, l1i: 32768, l2: 262144, l3: 3145728
CPU-Information:
manufacturer: 'Intel®',
brand: 'Core™ i5-3317U',
vendor: 'GenuineIntel',
family: '6',
model: '58',
stepping: '9',
revision: '',
voltage: '',
speed: '1.70',
speedmin: '0.80',
speedmax: '2.60',
cores: 4,
cache: l1d: 32768, l1i: 32768, l2: 262144, l3: 3145728
【讨论】:
【参考方案3】:您可以尝试os-usage,它是top
命令的包装器。
它提供诸如 cpu 使用情况和内存使用情况的统计信息。示例用法:
var usage = require('os-usage');
// create an instance of CpuMonitor
var cpuMonitor = new usage.CpuMonitor();
// watch cpu usage overview
cpuMonitor.on('cpuUsage', function(data)
console.log(data);
// user: '9.33', sys: '56.0', idle: '34.66'
);
// watch processes that use most cpu percentage
cpuMonitor.on('topCpuProcs', function(data)
console.log(data);
// [ pid: '21749', cpu: '0.0', command: 'top' ,
// pid: '21748', cpu: '0.0', command: 'node' ,
// pid: '21747', cpu: '0.0', command: 'node' ,
// pid: '21710', cpu: '0.0', command: 'com.apple.iCloud' ,
// pid: '21670', cpu: '0.0', command: 'LookupViewServic' ]
);
【讨论】:
【参考方案4】:无耻的塞- https://www.npmjs.com/package/microstats
还可以配置为在磁盘空间、cpu 或内存超过用户定义的阈值时提醒用户。适用于 linux、macOS 和 windows。
【讨论】:
以上是关于如何使用 node.js 获取系统统计信息的主要内容,如果未能解决你的问题,请参考以下文章
如何在 linux/Mac OSX 中获取网络适配器统计信息?
获取 ext3 和其他文件系统的类似 nfsstat 的统计信息