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

C0N*_*S3D 31 node.js npm

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

我试图获得整体服务器使用/统计(CPU和内存),而不仅仅是一个特定的进程或另一个.甚至可能是磁盘空间使用.

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

pis*_*tor 56

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

var os = require('os');

console.log(os.cpus());
console.log(os.totalmem());
console.log(os.freemem())
Run Code Online (Sandbox Code Playgroud)

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

还有一个包为你做这个,称为os-utils.

取自github上的示例:

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

os.cpuUsage(function(v){
    console.log( 'CPU Usage (%): ' + v );
});
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来像os-utils显示节点进程信息,而不是整体 (3认同)

Raj*_*rma 9

检查node-os-utils

  • CPU平均使用率
  • 可用和已用驱动器空间
  • 可用和已用内存空间
  • 操作系统
  • 正在运行的所有进程
  • TTY/SSH 打开
  • 打开的文件总数
  • 网络速度(输入和输出)
var osu = require('node-os-utils')

var cpu = osu.cpu

cpu.usage()
  .then(info => {
    console.log(info)
  })
Run Code Online (Sandbox Code Playgroud)


Erc*_*sen 5

由于我发现没有代码可以解决这个问题,并且不想仅仅依靠其他包来处理某些代码行,因此我编写了一个函数来计算两个连续函数调用之间的平均 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;
}
Run Code Online (Sandbox Code Playgroud)