8

我有一个分布式服务器系统。

有很多服务器,通过 PubSub 进行协调。它们都连接到统计服务器。每分钟服务器将其统计信息发送到统计服务器(处理了多少请求,平均时间等)。

所以......在这个统计消息中包含系统状态会很好。我需要 CPU 负载(每个内核)和可用内存量。

我做了一个小变通方法,决定用“exec”调用一个 linux 命令,解析答案并形成一个 JSON 数据进行发送。

但是我怎样才能从命令行获取这些数据呢?

在 Mac OS XI 上,可以使用 geektool 脚本轻松获得我需要的一切,但在 linux (debian) 上它们不起作用。

例如:

top -l 1 | awk '/PhysMem/ {print "Used: " $8 " Free: " $10}'

在 Mac OS X Lion 上,我得到:

Used: 3246M Free: 848M

只是debian中的一个错误......

4

4 回答 4

7

在 Linux 上,您可以使用 /proc。在这里查看一堆命令行示例来读取统计信息。

使用fs.readFile()直接从 Node 读取文件会更好

更新:还有可能更好的OS API 。用法示例:将 Node.js 中 os.cpus() 的输出转换为百分比

于 2012-04-26T12:12:58.303 回答
5

恕我直言,最好的选择是使用系统信息模块,

通过 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 } }
于 2018-04-18T21:02:38.420 回答
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' } ]
});
于 2016-04-07T11:19:01.300 回答
1

无耻插件 - https://www.npmjs.com/package/microstats

也可以配置为在磁盘空间、cpu 或内存超过用户定义的阈值时提醒用户。适用于 linux、macOS 和 windows。

于 2017-01-15T05:53:11.843 回答