通过 NodeJS 获取/查看内存和 CPU 使用情况

新手上路,请多包涵

我看到有几个节点包允许您查找特定进程的使用情况,例如 https://www.npmjs.com/package/usage

我正在尝试获取整体服务器使用情况/统计信息(CPU 和内存),而不仅仅是一个特定的进程。甚至可能使用磁盘空间。

我目前无法找到类似的东西,这可能吗?

原文由 J05H 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.4k
2 个回答

本机模块 os 可以为您提供一些内存和 cpu 使用情况统计信息。

 var os = require('os');

console.log(os.cpus());
console.log(os.totalmem());
console.log(os.freemem())

cpus() 函数为您提供平均值,但您可以使用公式和间隔来计算当前使用情况,如 答案中所述。

还有一个包可以为您执行此操作,称为 os-utils

取自 github 上的示例:

 var os = require('os-utils');

os.cpuUsage(function(v){
    console.log( 'CPU Usage (%): ' + v );
});

有关磁盘的信息,您可以使用 diskspace

原文由 piscator 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于我没有找到解决此问题的代码,并且不想仅仅为某些代码行依赖其他包,因此我编写了一个函数来计算两个连续函数调用之间的平均 CPU 负载。我假设 t_idle + t_user + t_sys = total cpu time 结果与我的 Windows 任务管理器的结果有点相似,但是,使用对我来说似乎不太敏感(例如,音乐播放比 Windows 任务管理器增加了更多的 cpu 负载)。如果我的假设是错误的,请纠正我。

 const os = require('os');

// Initial value; wait at little amount of time before making a measurement.
let timesBefore = os.cpus().map(c => c.times);

// Call this function periodically e.g. using setInterval,
function getAverageUsage() {
    let timesAfter = os.cpus().map(c => c.times);
    let timeDeltas = timesAfter.map((t, i) => ({
        user: t.user - timesBefore[i].user,
        sys: t.sys - timesBefore[i].sys,
        idle: t.idle - timesBefore[i].idle
    }));

    timesBefore = timesAfter;

    return timeDeltas
        .map(times => 1 - times.idle / (times.user + times.sys + times.idle))
        .reduce((l1, l2) => l1 + l2) / timeDeltas.length;
}

原文由 Ercksen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题