NodeJs:正在运行的spawn进程内存使用量正在增长

时间:2014-05-22 21:45:21

标签: node.js memory process pipe spawn

我使用以下代码在nodejs服务器的CLI环境中运行PHP脚本。 脚本获取stdin中的数据执行计算并将其他数据返回到stdout。

问题是要使用 child_process.spawn 运行脚本并使用增加内存使用量。所以我必须每隔一段时间重新启动节点应用程序。

我想继续使用RAM。

在示例中,我使用 cat 命令来模拟我的php脚本,但问题仍然存在,增加内存使用与setInterval中的周期数成比例。 我使用 setInterval 来模拟脚本的句点执行。

var spawn = require('child_process').spawn;

var php = spawn('cat');

var i = 0;
setInterval(function() {
    php.stdin.write(++i);
},10);

案例#2 我看到内存泄漏,即使:

var spawn = require('child_process').spawn;

var php = spawn('cat');
php.stdout.resume();
php.stderr.resume();

var i = 0;
setInterval(function() {
  gc && gc();
  console.log(process.memoryUsage());
  console.log(php.stdin.write(''+(++i)));
},1000);

执行: node --expose-gc --always-compact foo.js

测试节点v0.10.28

1 个答案:

答案 0 :(得分:0)

尝试增加间隔。更有可能php.stdin.write()在某些时候返回false,这表明缓冲正在发生,因为子进程无法跟上。如果write()确实返回false,通常应该停止写入,直到看到php.stdin上发出'drain'事件为止。