【问题标题】:Node.js get actual memory usage as a percentNode.js 以百分比形式获取实际内存使用情况
【发布时间】:2013-12-14 00:08:04
【问题描述】:

我使用“os”http://nodejs.org/api/os.html#os_os 来尝试计算一些系统统计信息以供在应用程序中使用。

但是我注意到它实际上无法正确计算内存,因为它忽略了缓存和缓冲区,因此需要正确计算单个可读百分比。如果没有它,大多数高性能服务器的内存几乎总是 90% 以上(基于我的测试)。

我需要这样计算:

(CURRENT_MEMORY-CACHED_MEMORY-BUFFER_MEMORY)*100/TOTAL_MEMORY

这应该让我更准确地了解系统正在使用的内存百分比。但是我见过的 os 模块和大多数其他 node.js 模块只能让我获得总内存和当前内存。

有没有办法在 node.js 中做到这一点?我可以使用 Linux,但我不知道系统的来龙去脉,不知道在哪里可以自行解决这个问题(要读取的文件以获取此信息,例如 top/htop)。

【问题讨论】:

    标签: javascript linux node.js


    【解决方案1】:

    基于Determining free memory on Linux,空闲内存 = 空闲 + 缓冲区 + 缓存。

    以下示例包括从节点 os 方法派生的值进行比较(无用)

    var spawn = require("child_process").spawn;
    var prc = spawn("free", []);
    var os = require("os");
    
    prc.stdout.setEncoding("utf8");
    prc.stdout.on("data", function (data) {
        var lines = data.toString().split(/\n/g),
            line = lines[1].split(/\s+/),
            total = parseInt(line[1], 10),
            free = parseInt(line[3], 10),
            buffers = parseInt(line[5], 10),
            cached = parseInt(line[6], 10),
            actualFree = free + buffers + cached,
            memory = {
                total: total,
                used: parseInt(line[2], 10),
                free: free,
                shared: parseInt(line[4], 10),
                buffers: buffers,
                cached: cached,
                actualFree: actualFree,
                percentUsed: parseFloat(((1 - (actualFree / total)) * 100).toFixed(2)),
                comparePercentUsed: ((1 - (os.freemem() / os.totalmem())) * 100).toFixed(2)
            };
        console.log("memory", memory);
    });
    
    prc.on("error", function (error) {
        console.log("[ERROR] Free memory process", error);
    });
    

    感谢 leorex。

    检查 process.platform === "linux"

    【讨论】:

      【解决方案2】:

      通过阅读文档,恐怕您没有任何原生解决方案。但是,您始终可以直接从命令行调用“免费”。我根据以下代码汇总了以下代码 Is it possible to execute an external program from within node.js?

      var spawn = require('child_process').spawn;
      var prc = spawn('free',  []);
      
      prc.stdout.setEncoding('utf8');
      prc.stdout.on('data', function (data) {
        var str = data.toString()
        var lines = str.split(/\n/g);
        for(var i = 0; i < lines.length; i++) {
           lines[i] = lines[i].split(/\s+/);
        }
        console.log('your real memory usage is', lines[2][3]);
      });
      
      prc.on('close', function (code) {
          console.log('process exit code ' + code);
      });
      

      【讨论】:

      猜你喜欢
      • 2013-04-20
      • 2019-11-11
      • 2015-07-28
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      相关资源
      最近更新 更多