gpt4 book ai didi

node.js - 产生 node.js 子进程会导致 Cloud Foundry 上的僵尸进程

转载 作者:IT老高 更新时间:2023-10-28 23:17:37 26 4
gpt4 key购买 nike

我有一个 node.js 应用程序,我想使用下面列出的代码生成子进程。

当我在本地运行这个应用程序时,每个“ps”命令都会很好地触发关闭和退出事件。然而,在我们的 Cloud Foundry (pivotal.io) 应用程序中,stdout.close 被触发,但子进程本身的“关闭”和“退出”事件永远不会发生。此外,这些进程在内存中仍然是僵尸进程(因此在约 500 次请求之后,服务器因 E_SPAWN 错误而死机)。所以看起来node.js进程句柄中的exit handler从来没有被触发,导致子进程的exit code没有被读取。

这可能与容器管理员、cgroups...有关吗?有没有人对此有解决方案或至少遇到过同样的问题?

测试代码:

var cp = require('child_process');

//..create express app

app.get('/foo/', function(req, res, next) {
var child = cp.spawn("ps",["aux"]);
child.stderr.pipe(process.stderr);

child.stdout.on('data', function(data) {
console.log('data');
res.send("\n<br>OUT" + data.toString());
});

child.stdout.on('close', function() {
console.log('close stdout');
res.send("\n<br>CLOSE STDOUT");
});

child.on('close', function() {
console.log('close');
res.send("\n<br>CLOSE");
});

child.on('exit', function() {
console.log('exit');
res.send("\n<br>EXIT");
});
});

app.listen();

示例 ps aux 输出:

<br>OUTUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root 1 0.0 0.0 1124 308 ? S<s 14:15 0:00 wshd: 189gaonkujh
vcap 31 0.2 0.0 602676 21692 ? S<sl 14:15 0:00 node index.js 1234
vcap 33 0.0 0.0 0 0 ? Z< 14:17 0:00 [ps] <defunct>
vcap 34 0.0 0.0 15332 1172 ? R< 14:17 0:00 ps aux

更新

查看评论以获取解决方法:使用以“true;”开头的自定义启动命令,例如cf push myapp -c 'true;node index.js'

最佳答案

你没有杀死你的子进程,所以它们就像僵尸一样闲逛。杀死你的僵尸,杀死你的 child (是的,这听起来很奇怪)..

child.on('exit', function() {
console.log('exit');
res.send("\n<br>EXIT");
child.kill();
});

关于node.js - 产生 node.js 子进程会导致 Cloud Foundry 上的僵尸进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27381163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com