我知道有一个api process.memoryUsage()来获取当前进程中的内存使用情况。如何获取node.js中的子进程内存使用情况?
但是,如果我通过child_process.spawn(command,[args],[options])启动一个新的子进程,并且我得到一个ChildProcess对象,那么如何才能获得新的进程内存使用情况?
我知道有一个api process.memoryUsage()来获取当前进程中的内存使用情况。如何获取node.js中的子进程内存使用情况?
但是,如果我通过child_process.spawn(command,[args],[options])启动一个新的子进程,并且我得到一个ChildProcess对象,那么如何才能获得新的进程内存使用情况?
如果您处于unix环境,那么您可以使用ps
(使用/proc/<pid>/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));
});
这是测试与Ubuntu 12.04和OS X狮子。虽然不认为它会在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()});
}
});