2015-10-07 7 views
23

Wir sind gerade dabei, von Knoten 0.10 zu Knoten 4.1.2 zu aktualisieren und wir sehen einige seltsame Muster. Die Anzahl der Verbindungen zu unserer Postgres-Datenbank verdoppelt sich 1 und wir sehen das gleiche Muster mit Anfragen an externe Dienste 2. Wir führen eine Cluster-App aus, auf der die native Cluster-API ausgeführt wird, und die Anzahl der Worker ist für beide Versionen identisch.Anfragen und Verbindungen doppelt auf Knoten 4.1.2

Ich verstehe nicht, warum das Upgrade der Runtime-Sprache scheinbar das Anwendungsverhalten durch doppelte Anfragen an externe Dienste ändern würde.

Postgres connections External requests

+0

Welches Knotenpaket verwenden Sie, um auf Postgres zuzugreifen? –

+0

'pg' v4.4.1. Ich habe auch ein [Problem auf ihrem Repo] geöffnet (https://github.com/brianc/node-postgres/issues/871), aber ich glaube nicht, dass das Problem von dort kommt. – Chris911

+0

Sie haben 4.4.2 veröffentlicht, um einige Probleme bei der Unterstützung von Knoten 4.x zu beheben. Hast du es schon probiert? Was lässt Sie glauben, dass das Problem nicht von dort kommt? Ich würde zuerst das PG-Paket vermuten. –

Antwort

1

Eines der interessanten Dinge, die ich mit 0.12 und 4.x bemerkt habe, ist die Änderung in der Garbage Collection. Ich habe das pg-Modul vorher noch nicht benutzt, daher weiß ich intern nicht, wie es seine Pools verwaltet, wenn es vom Speicher oder von der Speicherbereinigung betroffen wäre. Wenn Sie die Standardspeichereinstellung für den Knoten nicht definiert haben, können Sie versuchen, dies zu tun und sehen, ob Sie weitere Ergebnisse sehen.

node --max_old_space_size <some sane value in MB>

+0

Nach weiteren Untersuchungen bezweifle ich, dass das Problem von Postgres und dem Verbindungspool kommt. Was beunruhigend ist, ist wirklich die Anzahl der ausgehenden HTTP-Anfragen, die in der Anwendungslogik liegen und keine externe Lib verwenden. – Chris911

1

Ich lief in etwas Ähnliches, aber ich war immer doppelte Datei schreibt. Ich kenne Ihren genauen Fall nicht, aber ich habe ein Szenario gesehen, in dem Anfragen fast genau verdoppelt werden können.

in dem Update auf 4.1.2, process.send und child.send wurde von synchron gegangen asynchron.

fand ich ein Problem wie folgt aus:

var child = fork('./request.js'); 
var test = {}; 

child.send(small request); 
child.send(large request); 
child.on('response', function (val) { 
    console.log('small request came back: ' + val); 
    test = val; 
}); 

if(!test){ 
    //retry request 
} ... 

Also, wo wie zuvor sendet die Blockierung dieser Code ein Fehler aufgetreten ist und erneuten Versuchen zur Arbeit erlaubt hat, die nicht blockierende Version annimmt. Es ist tatsächlich kein Fehler aufgetreten, daher kommen die doppelten Anfragen.

+0

Interessant. Wir verwenden [throng] (https://github.com/hunterloftis/throng/blob/master/lib/throng.js), um die gesamte App zu gruppieren und zu forchen. Es gibt keine Wiederholungslogik darin. – Chris911

Verwandte Themen