我使用以下代码在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
答案 0 :(得分:0)
尝试增加间隔。更有可能php.stdin.write()
在某些时候返回false,这表明缓冲正在发生,因为子进程无法跟上。如果write()确实返回false,通常应该停止写入,直到看到php.stdin
上发出'drain'事件为止。