我知道有一個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()});
}
});