FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Waldmensch am 11 Juli 2019, 08:51:03

Titel: Chart Widget Memleak?
Beitrag von: Waldmensch am 11 Juli 2019, 08:51:03
Ich habe schon immer das Problem, das FTUI nach einer Weile crasht, egal ob in Fully oder im Chrome auf dem Desktop. Wenn man in den Chrome DevTools mal Heap Snapshots macht und vergleicht, sieht man, dass der Speicherverbrauch nur in eine Richtung geht und das ist nach oben. Nach einer Weile sieht man da "Millionen" Arrays, die aus dem Chart widget zu kommen scheinen. Im Screenshot sieht man 3 Snapshots ca. mit 5 Minuten Abstand gemacht. Irgendwann, nach so 12 Stunden ist beim Chrome "Ende Gelände" und die Seite hängt sich auf. Wenn ich weitere infos/tests liefern kann/soll, einfach Bescheid sagen.

- Im Chart Widget Script steht oben /* Version 2.8.1
- debug ist auf 0
- code des widget:
<div
data-type="chart"
data-uaxis='["secondary","primary","primary"]'
data-device ="Wechselrichter1"
data-get ="ProdTotal"
data-logfile="HISTORY"
data-logdevice='["logdb","logdb","logdb"]'
data-columnspec='["Solarwatt:Bat_SoC","Wechselrichter1:EV","Wechselrichter1:ProdTotal"]'
data-style='["ftui l4","ftui l2fill","ftui l1fill"]'
data-minvalue="0"
data-minvalue_sec="0"
data-maxvalue="10000"
data-maxvalue_sec = "100"
data-height="110"
data-width="420"
class="left nobuttons">
</div>




Titel: Antw:Chart Widget Memleak?
Beitrag von: Waldmensch am 11 Juli 2019, 09:50:44
Ich habe mal die beiden Prototypen sum() und clone() aus dem Array entfernt und in separate Funktionen gepackt (+ den restlichen Code entsprechend angepasst). Das sieht gefühlt schon ganz anders aus in der Timeline. Ich denke mal, in der Richtung muss man suchen.

function cloneArray(arr, reverse) {
var i, copy;

if (Array.isArray(arr)) {
copy = arr.slice(0);
//for(i=0; i < copy.length; i++) {
// copy[i] = Array.isArray(copy[i])?copy[i].clone():copy[i];
//}
return reverse?copy.reverse():copy;
} else if((typeof arr === 'object') && arr!==null) {
throw 'Cannot clone array containing an object!';
} else {
return reverse?arr.reverse():arr;
}
};

function sumArray(arr, in_start,in_end) {
var start = in_start!==undefined?in_start:0;
var end = in_end!==undefined?in_end+1:arr.length;
start = Math.min(start,end);
end = Math.max(start,end);
var sum = 0;
for (var i=start; i<end; i++) {
if (arr[i]!==undefined) sum += arr[i];
}
return sum;
}
Titel: Antw:Chart Widget Memleak?
Beitrag von: mumpitzstuff am 11 Juli 2019, 10:06:24
Vielleicht solltest du die Quelle des Widgets angeben und nicht nur die Version. Es schwirren sehr viele unterschiedliche Versionen davon rum...
Titel: Antw:Chart Widget Memleak?
Beitrag von: Waldmensch am 11 Juli 2019, 10:37:52
Ich habe mal die timeline eine Weile laufen lassen. Wenn ich das richtig interpretiere werden die blauen Spikes, die da stehenbleiben, nicht vom GC weggeräumt. Das heißt, das da alle halbe Minute der Speicher über 1MB "aufgeblasen" wird. Das Objekt nennt sich "data_old"

@mumpitzstuff: die Version ist von hier: https://forum.fhem.de/index.php/topic,100412.msg938873.html#msg938873
Titel: Antw:Chart Widget Memleak?
Beitrag von: Waldmensch am 11 Juli 2019, 11:35:21
Keine Ahnung, ob ich damit etwas kaputtgemacht habe, aber wenn man in Zeile 5001 (das ist am Ende der drawChart funktion) ein data_old = null; einfügt, räumt der GC korrekt auf und der Speicherfraß ist beendet. Das ganze FTUI stagniert auf dauer bei 6,5MB. Das Chart wird normal angezeigt. Vor/zurück Buttons nutze ich im Chart nicht



Titel: Antw:Chart Widget Memleak?
Beitrag von: Waldmensch am 11 Juli 2019, 11:41:51
Hier nochmal nach 20! Minuten (da lag der Speicherverbrauch sonst schon bei 100MB)

Titel: Antw:Chart Widget Memleak?
Beitrag von: mumpitzstuff am 11 Juli 2019, 13:08:53
Poste doch deine Erkenntnisse direkt im betreffenden Thread. Ich denke dann kann der ein oder andere der dort Anwesenden auch noch was dazu beitragen.
Titel: Antw:Chart Widget Memleak?
Beitrag von: Waldmensch am 11 Juli 2019, 13:44:19
Ich habe diesen Thread dorthin verlinkt. Vielleicht kann @eki damit was anfangen. Mein FTUI läuft jetzt seit über 2h und ist immer noch bei 6,5MB Speicherverbrauch. Selbst wenn es letztlich anders gefixt wird, ist die Quelle des Übels schon mal gefunden.


Gesendet von iPhone mit Tapatalk
Titel: Antw:Chart Widget Memleak?
Beitrag von: eki am 11 Juli 2019, 15:50:24
Danke für die Inputs, ich schaue es mir an.