我知道有一个 api process.memoryUsage() 来获取当前进程中的内存使用情况。
但是如果我通过 child_process.spawn(command, [args], [options]) 启动一个新的子进程并且我得到一个 ChildProcess 对象,那么我怎样才能获得新进程的内存使用情况?
我知道有一个 api process.memoryUsage() 来获取当前进程中的内存使用情况。
但是如果我通过 child_process.spawn(command, [args], [options]) 启动一个新的子进程并且我得到一个 ChildProcess 对象,那么我怎样才能获得新进程的内存使用情况?
获取孩子的 memoryUsage 最简单的方法是安装 pidusage
链接:https ://www.npmjs.com/package/pidusage
在控制台中写这个来安装它:
在 Windows 命令中:npm i pidusage --save
在 Mac 命令中:sudo npm i pidusage --save
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
}
*/
如果您想获得多个孩子的 memoryUsage,您需要更改 child.pid for and array [child.pid,child2.pid], function (err, stats) ...
我们可以使用 nodejs ipc 协议获得多平台解决方案。您只需要设置事件以从父进程请求内存使用,然后process.memoryUsage()
从生成的子进程发送。
父.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()});
}
});
如果您在 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 lion 测试的。虽然不认为它会在 Windows 中工作。