我有一个分布式服务器系统。
有很多服务器,通过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中的错误......
答案 0 :(得分:7)
在Linux上,您可以使用/ proc。有关一组命令行示例,请参阅here以阅读统计信息。
最好使用fs.readFile()
直接从Node读取文件更新: 还有OS API可能更好。 用法示例:Convert the output of os.cpus() in Node.js to percentage
答案 1 :(得分: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 } }
答案 2 :(得分:1)
您可以尝试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' } ]
});
答案 3 :(得分:1)
无耻插头 - https://www.npmjs.com/package/microstats
还可以配置为在磁盘空间,cpu或内存超过用户定义的阈值时提醒用户。适用于linux,macOS和windows。