Das Erzeugen von node.js Child-Prozessen führt zu Zombie-Prozessen in der Cloud-Foundry

9

Ich habe eine node.js-App und möchte untergeordnete Prozesse mit dem unten aufgeführten Code erzeugen.

Wenn ich diese App lokal ausführe, löst jeder der "ps" -Befehle das Schließen und Beenden aus. In unserer App cloud gießerei (pivotal.io) wird jedoch die stdout.close ausgelöst, aber die Ereignisse 'close' und 'exit' des Kindes verarbeiten sich nie. Außerdem bleiben die Prozesse als Zombie-Prozesse im Speicher (also nach ca. 500 Requests stirbt der Server bei einem E_SPAWN-Fehler). Es scheint also, dass der Exit-Handler in der Prozesskennung node.js nie ausgelöst wird, was dazu führt, dass der Exit-Code des untergeordneten Prozesses nicht gelesen wird.

Kann das mit dem Containerwart, Cgroups ... zusammenhängen? Hat jemand eine Lösung dafür oder ist zumindest auf dasselbe Problem gestoßen?

Der Testcode:

%Vor%

Beispiel ps aux output:

%Vor%

AKTUALISIEREN

Siehe die Kommentare für eine Problemumgehung: Verwenden Sie einen benutzerdefinierten Startbefehl, der mit 'true;' beginnt, z. cf push myapp -c 'true;node index.js'

    
mweststrate 09.12.2014, 14:21
quelle

1 Antwort

0

Du tötest deine Kinderprozesse nicht, also hängen sie als Zombies herum. Töte deine Zombies, indem du deine Kinder tötest (ja, das hört sich ziemlich komisch an) ..

%Vor%     
aug2uag 28.08.2015 04:12
quelle