現在のプロセスのメモリ使用量を取得するためのapiprocess.memoryUsage()があることを知っています。
しかし、child_process.spawn(command、[args]、[options])によって新しい子プロセスを開始し、ChildProcessオブジェクトを取得した場合、新しいプロセスのメモリ使用量を取得するにはどうすればよいですか?
現在のプロセスのメモリ使用量を取得するためのapiprocess.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 および 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では機能しないと思います。