12

現在のプロセスのメモリ使用量を取得するためのapiprocess.memoryUsage()があることを知っています。

しかし、child_process.spawn(command、[args]、[options])によって新しい子プロセスを開始し、ChildProcessオブジェクトを取得した場合、新しいプロセスのメモリ使用量を取得するにはどうすればよいですか?

4

3 に答える 3

9

子の 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) ... を変更する必要があります。

于 2018-07-02T18:20:28.107 に答える
5

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()});
    }
});
于 2016-01-30T06:04:02.270 に答える
1

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では機能しないと思います。

于 2012-07-20T08:58:17.570 に答える