【问题标题】:spawning node.js child processes results in zombie processes on cloud foundry产生 node.js 子进程会导致 Cloud Foundry 上的僵尸进程
【发布时间】:2014-12-09 14:21:58
【问题描述】:

我有一个 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

更新

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

【问题讨论】:

标签: node.js cloud-foundry child-process


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多