如何在node.js中获取子进程内存使用情况?

如何在node.js中获取子进程内存使用情况?,node.js,memory-management,child-process,Node.js,Memory Management,Child Process,我知道有一个api进程。memoryUsage()可以获取当前进程中的内存使用情况 但是,如果我通过child_process.spawn(命令、[args]、[options])启动一个新的子进程,并获得一个ChildProcess对象,那么如何获得新的进程内存使用率呢?如果您在unix环境中,那么您可以使用ps(使用/proc//stat底层)。下面是一个例子: // Spawn a node process var child_process = require('child_proces

我知道有一个api进程。memoryUsage()可以获取当前进程中的内存使用情况


但是,如果我通过child_process.spawn(命令、[args]、[options])启动一个新的子进程,并获得一个ChildProcess对象,那么如何获得新的进程内存使用率呢?

如果您在unix环境中,那么您可以使用
ps
(使用
/proc//stat
底层)。下面是一个例子:

// Spawn a node process
var child_process = require('child_process');
var child = child_process.spawn('node');

// Now get its pid.
child_process.exec('ps -p' + child.pid + ' -o vsize=',  function (err, stdout, stderr) {
  err = err || stderr;
  if (err) {
      return console.log('BAD Luck buddy: ', err);
  }
  console.log('YOU\'ve done it', parseInt(stdout, 10));
});

这是用Ubuntu12.04和OSXLion测试的。虽然我不认为它在windows下工作。

我们可以通过使用nodejs ipc协议获得多平台的解决方案。您只需要设置从父进程请求内存使用的事件,然后从派生的子进程发送
process.memoryUsage()

parent.js

var ChildProcess = require('child_process'),
    child = ChildProcess.fork('./child.js');

child.on('message', function(payload){
    console.log(payload.memUsage);
});

child.send('get_mem_usage');
child.js
中,它可能是这样的

process.on('message', function(msg){
    if(msg === 'get_mem_usage'){
         process.send({memUsage: process.memoryUsage()});
    }
});

获取孩子记忆的最简单方法是安装PIDU

链接:

在控制台中,编写以下命令以安装它:

在Windows命令中:npm i PIDUSSION--保存
在Mac命令中:sudo npm i pidausage--save


如果您想获取多个子进程的内存,您需要更改child.pid for和数组[child.pid,child2.pid],函数(err,stats)…。

实际上,这种方法不考虑子进程本身创建进程时的情况。在这种情况下,最好使用'pidusage-tree'。这是限制子进程资源使用的合适方法吗?例如,如果子进程内存使用量达到x字节,则我希望停止该进程。这取决于您正在执行的操作,因为如果您有一个进程只需执行一个简单的任务,则无需执行该操作,但是,如果您有一个web服务器,它接收大量请求,并且您想要专用特定数量的内存或cpu,那么您可以这样做,没有任何东西可以阻止您这样做。这只适用于子节点也是节点脚本(
fork
),但OP询问任意进程(
spawn
)。
let pidusage = require('pidusage');

const cp = require("child_process");

const child = cp.spawn('ls', ['-lh', '/usr']);

pidusage(child.pid, function (err, stats) {

console.log(stats);

});
/*
Output: 
{
   cpu: 10.0,            // percentage (from 0 to 100*vcore)
   memory: 357306368,    // bytes
   ppid: 312,            // PPID
   pid: 727,             // PID
   ctime: 867000,        // ms user + system time
   elapsed: 6650000,     // ms since the start of the process
   timestamp: 864000000  // ms since epoch
}
*/