Skip to content

Speicherüberwachung

In der Softwareentwicklung und Wartung von langlaufenden Programmen ist die System- und Prozessüberwachung ein Teil der operativen Aufgaben. Um dies zu unterstützen gibt es u.a. die Möglichkeit entsprechende Log-Ausgaben zu erstellen und im zweiten Schritt auszuwerten.
Hier im konkreten Fall, wie die Speicherauslastung im Tagesverlauf, bzw. über mehrere Tage aussieht. Thema Peak-Performance und Datenkosten.

In langlaufenden Serviceprogrammen, in diesem Kontext geht es um einen Windows-Dienst, welcher regelmäßig tausende von Datensätze verarbeitet. Dieser Windows-Dienst erzeugt nun einige Log-Ausgaben mehr, um nach einzelnen Prozessschritten den Status der Garbage-Collection auf einfache Weise überwachen zu können.

Hintergrund ist, letztes Jahr, also Ende Oktober 2022, hatten die Domain-Controller ein System-Update bekommen. Dadurch hatte sich das Aufrufverhalten von AD-Operationen verändert, in der Form, daß an bestimmten Stellen der Prozessspeicher nicht mehr freigegeben wurde. Der Windows-Dienst kam so mit einer "OutOfMemoryException" zum Stillstand.

Um die betreffenden Stellen im Code aufzuspüren, wurden zusätzliche Log-Ausgaben implementiert. Das war die einfachste Maßnahme, um die betreffenden Fehlerquellen einzugrenzen.

Die betreffenden AD-Gruppenabfragen konnten dann relativ schnell angepasst werden.

Für die weitere Prozessüberwachung werden die Log-Ausgaben mit einem einfachen Windows-Task regelmäßig gefiltert, um die Details in einem 3. Schritt in einem Report zu visualisieren.

Hier nun das Skript für die Filterung der Log-Ausgaben (Bezeichnungen wurden geändert). Warum ein Batch-Skript, weil es keine zusätzlichen Berechtigungseinstellungen zur Ausführung bedarf. Zur Erstellung habe ich tatsächlich auch ChatGPT aufgerufen (3 Prompts) und dann ein paar Details angepasst.

  • Bitte daran denken, die Batch-Datei mit ANSI-Encoding abzuspeichern, sonst funktioniert das "@echo off" nicht! 😉
  • Datumsformat prüfen. Mit einer Testausgabe (echo %date%) das Datumsformat auf dem Zielsystem kurz prüfen, denn beim englischen Format steht ja bekanntlich der Monat an erster Stelle.
@echo off

set search=memory logging

REM die Ausgabedatei bekommt im Dateinamen den Zeitstempel des aktuellen Tages (yyyyMMdd)
echo %date%

set output=_memoryLogging_%date:~-4,4%%date:~-10,2%%date:~-7,2%.txt
set input=_logOfDataService.txt
set /a count=0

(for /f "tokens=1,* delims=:" %%a in ('findstr /i /n /c:"%search%" %input%') do (
    set /a count+=1
    echo %%a:%%b
)) > %output%

if %count%==0 (
    echo Der zu suchende Text '%search%' wurde nicht gefunden. > %output%
    echo Evtl. wurden heute keine Daten übertragen? Prüfen Sie das gerne in der Datei '%input%' >> %output%
) else (
    echo Es wurden %count% Treffer gefunden und in %output% gespeichert.
)

Weitere Details werden noch folgen, weil das Reporting zum einen in ein vorhandenes System integriert wird und in einem separaten Admin-Panel eine kleine Darstellung mit 3d.js bekommt.

Die Learnings werde ich hier gerne teilen:

  • die Batch-Datei mit ANSI-Encoding speichern
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 3,00 out of 5)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert