Hallo zusammen,
bei mir wurden in Räumen mit vielen SVG-Plots immer wieder einzelne Diagramme nicht angezeigt. Nach einem Neuladen war dann häufig ein anderes Diagramm betroffen. Oft waren mehrere Diagramme betroffen.
Das Problem trat sowohl beim direkten Zugriff auf FHEMWEB als auch über einen Reverse-Proxy auf. Dort war passend dazu folgender Fehler zu sehen:
recv() failed (104: Connection reset by peer) while reading response header from upstream
Der entscheidende Test war:
attr WEB plotfork 0
Damit trat das Problem nicht mehr auf. Mit plotfork 1 war es wieder reproduzierbar.
Offenbar beendet sich der Fork-Kindprozess nach der SVG-Ausgabe, ohne dem HTTP/1.1-Client vorher mitzuteilen, dass die Verbindung geschlossen wird. Browser beziehungsweise Proxy können die Verbindung deshalb für den nächsten SVG-Request wiederverwenden und laufen dann sporadisch in einen Connection Reset.
Ich habe testweise in 01_FHEMWEB.pm im Child-Zweig folgende Zeile ergänzt:
} elsif(defined($pid)){ # child
delete $hash->{BUF};
$hash->{isChild} = 1;
$FW_headerlines .= "Connection: close\r\n";
}
Seitdem laufen die SVGs auch mit plotfork 1 zuverlässig und weiterhin performant. Mehrfaches Neuladen mit vielen parallelen Diagrammen erzeugt weder fehlende Plots noch weitere Connection Resets.
Getestet habe ich mit:
01_FHEMWEB.pm 31325 2026-06-01
plotEmbed 2
plotfork 1
Vielleicht könnte jemand prüfen, ob "Connection: close" bei Antworten aus dem Fork-Kindprozess grundsätzlich ergänzt werden sollte?
Danke und Gruß
Chris