Ich war mit meinem Server mit pm2 start ...
und pm2 monit
zeigte mir 3GB memory
nach 2 Stunden. Also habe ich memwatch angeschlossen, nun habe ich noch 2 Stunden gewartet und wieder ist der von pm2 monit
angezeigte Speicher 3GB
erreicht.Node.JS Speicherverlust mit PM2
Also überprüfte ich die Protokolle memwatch generiert. Zeigte mir:
{ before: { nodes: 75659, size_bytes: 11141702, size: '10.63 mb' },
after: { nodes: 73226, size_bytes: 10840598, size: '10.34 mb' },
change:
{ size_bytes: -301104,
size: '-294.05 kb',
freed_nodes: 5141,
allocated_nodes: 2708,
Und ein anderer:
{ before: { nodes: 72591, size_bytes: 10728318, size: '10.23 mb' },
after: { nodes: 73284, size_bytes: 10798062, size: '10.3 mb' },
change:
{ size_bytes: 69744,
size: '68.11 kb',
freed_nodes: 5931,
allocated_nodes: 6620,
Jetzt bin ich wirklich verwirrt, das sind die letzten Protokolle so dass ich ziemlich sicher bin, das sind die Protokolle erzeugt, wenn pm2 monit
den riesigen Speicherverlust zeigte.
Also, warum ist memwatch
zeigt mir 10MB+
speicher und pm2 monit zeigt 3GB+
?
Schalen Nun zu etwas wie forever
oder monit zu sehen, ob das Leck noch existiert.
Ein bisschen mehr Hintergrund
- Ich habe versucht, das Leck zu profilieren und zu finden und es ist nicht irgendein Leck zeigt auf den Profilen.
- Der Memwatch-Vergleich wird gestartet, wenn ein Client eine Verbindung herstellt und die Differenz beim Trennen des Clients auftritt.
Darüber habe ich versucht, es für die letzten 2 Tage zu profilieren und kann einfach nicht das Problem finden. Also entschied ich mich, nach Golang zu gehen, was erstaunlich ist, große Speicher- und Leistungsunterschiede. Sehr effizient. Endlich keine verwirrenden Lecks. Plus, es ist ziemlich einfach zu kodieren, umkodierte Javascript zu Golang in weniger als einem Tag. – majidarif