feat: automatische Heap-Überwachung integriert mit Reload bei Überschreitung

- monitorHeapAndReload() in /utils/common/monitorMemory.js ausgelagert
- automatische Heap-Prüfung im 10s-Intervall in MapComponent integriert
- reload bei Überschreitung von 8 GB Heap zur Stabilisierung bei Langzeitbetrieb
- useEffect-Cleanup ergänzt mit clearInterval für sauberes Entfernen bei Unmount
- Ziel: frühzeitige Entlastung vor möglichem Memory Overflow
This commit is contained in:
ISA
2025-06-06 11:05:33 +02:00
parent f7f7122620
commit 1ec0a8a611
3 changed files with 23 additions and 2 deletions

View File

@@ -79,6 +79,7 @@ import useDynamicDeviceLayers from "@/hooks/useDynamicDeviceLayers.js";
import useDataUpdater from "@/hooks/useDataUpdater"; import useDataUpdater from "@/hooks/useDataUpdater";
import { cleanupPolylinesForMemory } from "@/utils/polylines/cleanupPolylinesForMemory"; import { cleanupPolylinesForMemory } from "@/utils/polylines/cleanupPolylinesForMemory";
import { cleanupMarkers } from "@/utils/common/cleanupMarkers"; import { cleanupMarkers } from "@/utils/common/cleanupMarkers";
import { monitorHeapAndReload } from "@/utils/common/monitorMemory";
//----------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------------
const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
//------------------------------- //-------------------------------
@@ -304,7 +305,6 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
// vorherige Marker & Polylinien vollständig bereinigen // vorherige Marker & Polylinien vollständig bereinigen
markers.forEach(marker => { markers.forEach(marker => {
console.log("Marker-Typ:", marker.options);
marker.remove(); marker.remove();
}); });
cleanupPolylinesForMemory(polylines, map); cleanupPolylinesForMemory(polylines, map);
@@ -780,6 +780,13 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
cleanupMarkers(markers, oms); cleanupMarkers(markers, oms);
}; };
}, []); }, []);
//--------------------------------------------
// Überwacht den Speicherverbrauch und lädt die Seite neu, wenn er zu hoch ist, 8GB ist das Limit dann lädt die Seite neu
useEffect(() => {
const interval = monitorHeapAndReload(8, 10000);
return () => clearInterval(interval); // wichtig: aufräumen!
}, []);
//--------------------------------------------- //---------------------------------------------
//-------------------------------------------- //--------------------------------------------
return ( return (

View File

@@ -1,2 +1,2 @@
// /config/appVersion // /config/appVersion
export const APP_VERSION = "1.1.237"; export const APP_VERSION = "1.1.238";

View File

@@ -0,0 +1,14 @@
export const monitorHeapAndReload = (limitInGB = 8, intervalMs = 10000) => {
const limit = limitInGB * 1024 * 1024 * 1024;
return setInterval(() => {
const heap = performance.memory?.usedJSHeapSize || 0;
console.log("Heap:", (heap / 1024 / 1024).toFixed(2), "MB");
if (heap > limit) {
console.warn("🚨 Heap-Limit erreicht. Reload wird ausgeführt.");
location.reload();
}
}, intervalMs);
};