Heute habe ich meinen Adapter einmal einem kleinen Stresstest unterworfen und den Speicherverbrauch beobachtet.
top sagt mir, dass in einer Stunde der unter VIRT gemeldete Speicher um ca. 1MByte gestiegen ist (von ca.130.000 auf 131.000).
Das ist natürlich unschön und ich würde gerne die Ursache finden und beheben.
Der Adapter läuft als Dämon und pollt zyklisch externe Werte.
Dazu nehme ich folgendes Konstrukt (habe ich aus dem Solarlog-Adapter entnommen)
adapter.on('ready', function() {
adapter.subscribeStates('disablePeriod');
adapter.log.debug('[INFO] Starting adapter');
let pollingTime = (adapter.config.pollCycle * 1000) || 300000;
adapter.log.debug('[INFO] Configured polling cycle: ' + pollingTime);
if (!polling) {
polling = setTimeout(function repeat() { // poll states every [30] seconds
main();
setTimeout(repeat, pollingTime);
}, pollingTime);
};
});
Meine js-Erfahrungen sind nicht so wahnsinnig toll ausgeprägt.
Wenn ich dieses Konstrukt am Ende betrachte, so ist das doch ein rekursiver Aufruf, der zunächst nach dem Timeout main() aufruft und danach wieder nach dem Timeout sich selbst und danach nach dem Timeout …
Ansonsten wäre das Programm ja auch nach kurzer Zeit am Ende angelangt.
Wenn das so wäre, dann kann ich mir den Effekt des wachsenden Speicherbedarfs natürlich erklären.
Liege ich da richtig?
Falls ja, wie macht man diese Poll-Schleife denn "richtig"?