Erkennen und behandeln kritischer Systemzustände

Hardware-Ausfälle

Gravierende Hardware-Ausfälle, wie Festplatten-Crashs, erlauben gar keine Vorhersage, außer dass Datenverlust dann sehr wahrscheinlich ist. Die Schutzmaßnahmen dagegen, angefangen bei regelmäßigen System- und Datenbank-Backups bis zur Hochverfügbarkeit durch Redundanz, werden hier nicht behandelt. Sie liegen in der Verantwortung des Anwenders. Siehe aber den Abschnitt Konzepte für Cold Standby.

Virtualisierung


In virtualisierten Umgebungen kann sich eine Instabilität der Virtualisierungsplattform genauso auswirken wie ein Hardware-Ausfall. Auch das liegt in der Verantwortung des Anwenders und ist nicht Gegenstand dieses Handbuches.

Systemressourcen


Ein Programm wie Lobster_data braucht während seiner Arbeit verschiedene Systemressourcen, z. B. CPU-Zeit, freien Arbeitsspeicher, freien Festplattenspeicher, Netzwerkverbindungen, Datei-Handles, parallele Programmabläufe (Threads), usw. Abhängig vom Betriebssystem, von der Hardware und von der Systemkonfiguration gibt es für diese Ressourcen immer eine Begrenzung. Alle Programme, die gleichzeitig ausgeführt werden, konkurrieren um diese Ressourcen. Je nach Art der Ressource kann es dabei zu temporären Engpässen kommen oder zu einem langsamen Verbrauch der Ressourcen über längere Zeit.

Wenn eine Ressource erschöpft ist, kommt es zu einem kritischen Systemzustand, in dem die erwartete Arbeitsweise des Programmes nicht mehr möglich ist. Diese Situation muss unbedingt verhindert werden, denn wenn keine Arbeit per Lobster_data mehr möglich ist, kann auch durch dieses Programm keine sinnvolle Behandlung von Fehlern mehr erfolgen. Es kommt dann entweder zur Blockierung oder zum Programm-Absturz.

Auf drei konkrete Ressourcen sollte besonders geachtet werden.

  • Der Arbeitsspeicher, der der Java Virtual Machine (JVM) zugesichert wurde.

  • Der Festplattenspeicher, speziell die Partition, in der der Lobster Integration Server installiert wurde und zusätzlich die Systempartition.

  • File-Handles. Zum Lesen oder Schreiben von Dateien und zum Aufbau von Netzwerk-Verbindungen werden File-Handles gebraucht. Mangel an File-Handles kann zu einem Deadlock führen.

Wenn kein freier Arbeitsspeicher oder kein freier Festplattenplatz mehr vorhanden ist, besteht die Gefahr, bereits empfangene Daten zu verlieren. In Lobster_data ist durch eine Vielzahl von Einzelmaßnahmen gesichert, dass solcher Datenverlust nahezu ausgeschlossen ist, solange die bestimmungsgemäße Programmausführung möglich ist. Bei Erschöpfung einer wichtigen Systemressource ist aber trotzdem eine geringe Wahrscheinlichkeit für einen Datenverlust nicht mehr auszuschließen. Deshalb muss eine volle Festplatte oder eine OutOfMemory Exception unbedingt vermieden werden.

Zur Überwachung des Plattenplatzes ausgewählter Partitionen aus einem Profil, kann die Funktion disk-free( [path a], [modus b,[unit c]]) verwendet werden.

Deadlocks


Nun zur Deadlock-Problematik, die nur selten auftritt und nur bei stark belasteten Systemen. Eine versteckte Ursache für einen nahezu vollständigen Stillstand der Verarbeitung kann der Mangel an freien File-Handles sein. Für jede Netzwerkverbindung wird ein File-Handle benötigt. Bei starkem Zugriff über das Netzwerk können die File-Handles knapp werden. Um eine Anforderung aus dem Netz zu bearbeiten, werden ebenfalls File-Handles benötigt, z. B. zum Lesen einer Konfigurationsdatei oder zum Schreiben temporärer Daten in eine Temporärdatei. Diese Verarbeitungsvorgänge warten dann darauf, dass wieder File-Handles frei werden. Das kann zu einem nahezu vollständigen Stillstand der Verarbeitung führen, der erst nach längerer Zeit wieder aufgelöst wird, wenn die Timeouts erreicht sind. Je länger die Timeouts eingestellt sind, umso länger wird das dauern. Wenn in dieser Zeit die Zugriffe aus dem Netzwerk nicht abnehmen, wird es sofort wieder erneut zur Blockierung kommen.

Bedauerlicherweise können wir für die Vielzahl der unterstützten Betriebssysteme keine einheitliche Methode für eine automatische Überwachung der File-Handles bieten.

Besonders gefährdet ist hier ein Lobster DMZ Server, weil der pro externem Zugriff möglicherweise eine interne Verbindung aufbauen muss. Es wäre deshalb bei einem hoch belasteten System eine völlig falsche Entscheidung, den DMZ Server auf einem Workstation-Betriebssystem installieren zu wollen.

Störungen im Netzwerk

Störungen im Netzwerk schränken die Verfügbarkeit ein. Die Gefahr eines Datenverlustes ist hier zwar gering, aber hier wirkt leider der psychologische Faktor. Die Verarbeitung geht nahezu auf Null zurück, aber gleichzeitig auch die CPU-Last und auch beim Arbeitsspeicher gibt es keine Auffälligkeiten. In dieser Situation wird man als Systemverwalter unruhig. Die naheliegende Idee ist der Neustart des gesamten Lobster Integration Servers. Dieser beendet sich aber nicht, weil die begonnenen Verarbeitungsprozesse nicht beendet sind. Die Verarbeitungsprozesse enden erst mit einem Timeout. Wenn in dieser Situation der Prozess beendet wird, also das laufende Programm zum Abbruch gezwungen wird, ist ein Datenverlust möglich. Empfehlung: Nutzen Sie in dieser Situation die Vorgehensweise entsprechend Abschnitt Schneller Shutdown durch Datei force_stop. Das verringert die Gefahr eines Datenverlustes.