Linux-Umgebung einrichten und prüfen

Linux® -Betriebssysteme durchlaufen eine große Anzahl von Patches und Aktualisierungen.

IBM® -Mitarbeiter können die Java VM nicht mit jedem Patch testen. Die Zielsetzung ist, die aktuellsten Releases einiger bestimmter Produktdistributionen zu testen. Halten Sie sich an den Grundsatz, Ihre Systeme möglichst immer durch aktuelle Programmkorrekturen auf dem neuesten Stand zu halten. Informationen zum Abrufen der neuesten Aktualisierungen und zum Anzeigen der Fixlisten finden Sie auf den Unterstützungsseiten für Java SDK.

Arbeitsverzeichnis

Das aktuelle Arbeitsverzeichnis des Java VM-Prozesses ist die Standardposition für die Generierung von Kerndateien, Java™ -Speicherauszügen, Heapspeicherauszügen und Java VM-Traceausgaben, einschließlich Anwendungstrace und Methodentrace. Für dieses Verzeichnis muss genügend freier Plattenspeicherplatz verfügbar sein. Außerdem muss die Java-VM über Schreibzugriff verfügen.

Linux -Systemspeicherauszüge (Kerndateien)

Bei einem Absturz ist der Systemspeicherauszug die wichtigste Quelle für Diagnosedaten. Wenn Sie sicherstellen möchten, dass diese Datei generiert wird, müssen Sie folgende Einstellungen prüfen.

Einstellungen des Betriebssystems

Die Einstellungen des Betriebssystems müssen korrekt sein. Diese Einstellungen können je nach Distribution und Linux -Version variieren.

Wenn Sie ausführliche Kerndateien wünschen, legen Sie die folgenden Optionen für ulimit fest:
ulimit -c unlimited		 turn on corefiles with unlimited size  
ulimit -n unlimited		 allows an unlimited number of open file descriptors
ulimit -m unlimited		 sets the user memory limit to unlimited
ulimit -f unlimited		 sets the file size to unlimited

Weitere Informationen zu ulimit -Einstellungen finden Sie unter System konfigurieren in der Benutzerdokumentation zu OpenJ9 .

Ab Java 5 wird der Wert ulimit -c für den veränderlichen Grenzwert ignoriert und der feste Grenzwert verwendet, um die Generierung der Kerndatei sicherzustellen.

Linux-Tools wie Automatic Bug Reporting Tool (ABRT) und das Tool Apport verwenden Einstellungen in der Linux-Datei /proc/sys/kernel/core_pattern, um Kerndateien an ein Diagnoseprogramm umzuleiten. Diese Tools und die Einstellungen in der Datei /proc/sys/kernel/core_pattern, die von ihnen verwendet werden, verhindern möglicherweise, dass Systemspeicherauszüge von der JVM erfolgreich generiert werden können. Die Tools sind in einigen Linux-Distributionen standardmäßig aktiviert. Möglicherweise wird die folgende Fehlernachricht angezeigt:
JVMPORT030W "proc/sys/kernel/core_pattern setting ..... 
specifies that the core dump is to be piped to an external program.
Attempting to rename either core or core.<pid>
Prüfen Sie die Konfiguration dieser Tools oder ziehen Sie in Betracht, die Tools zu inaktivieren, falls Probleme auftreten, wenn Sie versuchen, Systemspeicherauszüge über die Java-VM zu generieren.
Einstellungen der Java Virtual Machine

Wenn im Fall eines Absturzes Kerndateien generiert werden sollen, prüfen Sie, ob dies in den Einstellungen der Java-VM festgelegt ist.

Führen Sie den Befehl java -Xdump:what aus, der ungefähr folgende Ausgabe erstellen sollte:
-Xdump:system:
    events=gpf+abort+traceassert+corruptcache,
    label=/mysdk/sdk//jrebin/core.%Y%m%d.%H%M%S.%pid.dmp,
    range=1..0,
    priority=999,
    request=serial
Diese Werte sind die Standardeinstellungen. Es muss mindestens die Option events=gpf eingestellt sein, damit bei einem Absturz eine Kerndatei generiert wird. Mit der Befehlszeilenoption -Xdump:system[:name1=value1,name2=value2 ...] können Sie Optionen ändern und festlegen.
Verfügbarer Plattenspeicherplatz

Der verfügbare Plattenspeicherplatz muss zum Schreiben der Kerndatei ausreichen.

Die JVM lässt jedes Verzeichnis als Zielverzeichnis für die erstellte Kerndatei zu, das in der Option label angegeben ist. Beispiel:
-Xdump:system:label=/mysdk/sdk/jre/bin/core.%Y%m%d.%H%M%S.%pid.dmp
Um die Kerndatei an diese Position zu schreiben, muss ausreichend Plattenspeicherplatz vorhanden sein (für einen 32-Bit-Prozess können bis zu 4 GB erforderlich sein) und die korrekten Berechtigungen für den Java-Prozess zum Schreiben an diese Position.

ZipException oder IOException unter Linux

Wenn Sie eine große Anzahl von Dateideskriptoren zum Laden verschiedener Klasseninstanzen verwenden, wird möglicherweise die Fehlernachricht "java.util.zip.ZipException: error in opening .zip file" oder eine andere Form von IOException angezeigt, die darauf hinweist, dass eine Datei nicht geöffnet werden konnte. Die Lösung besteht darin, die Bedingungen für Dateideskriptor mit dem Befehl ulimit zu verbessern. Mit folgendem Befehl können Sie den aktuellen Grenzwert für offene Dateien ermitteln:
ulimit -a
Wenn Sie eine höhere Anzahl offener Dateien zulassen möchten, geben Sie folgenden Befehl ein:
ulimit -n 8196

Linux on zSeries

Wenn Sie Java 7 unter zLinux unter zVM auf z10 -Hardware ausführen, müssen Sie zVM Version 5 Release 2 oder höher verwenden. Wenn Sie frühere zVM-Versionen verwenden, können Sie nicht von den Leistungsvorteilen profitieren, die bei DFP (Data Facility Product) verfügbar sind.

Threadbibliotheken

Die von IBM Java VM unterstützten Distributionen stellen die erweiterte native POSIX -Threadbibliothek für Linux (NPTL) bereit.

Sie können Ihre glibc-Version erkennen, indem Sie zum Verzeichnis /lib wechseln und die Datei libc.so.6ausführen. Der Linux -Befehl ldd gibt Informationen aus, die Ihnen beim Ausarbeiten der Abhängigkeiten der gemeinsam genutzten Bibliothek Ihrer Anwendung helfen sollten.

CPU-Zeitlimits zur Steuerung nicht mehr steuerbarer Tasks verwenden

Da Echtzeitthreads mit hohen Prioritäten und einer Terminierung nach dem First In/First Out-Prinzip ausgeführt werden, können fehlschlagende Anwendungen (für gewöhnlich mit engen CPU-gebunden Schleifen) dazu führen, dass ein System nicht mehr reagiert. In einer Entwicklungsumgebung kann es hilfreich sein, dafür zu sorgen, dass nicht mehr steuerbare Tasks abgebrochen werden; dies ist durch eine Beschränkung des CPU-Bereichs möglich, der von den Tasks genutzt werden darf. Eine Beschreibung der Einstellungen für veränderliche und feste Grenzwerte finden Sie unter #linux_setup__linux_core_files .

Der Befehl ulimit -t listet den aktuellen Zeitlimitwert in CPU-Sekunden auf. Dieser Wert lässt sich entweder über einen veränderlichen Grenzwert verringern (mit dem Befehl ulimit -St 900 wird beispielsweise das veränderliche Zeitlimit auf 15 Minuten gesetzt) oder über feste Grenzwerte zum Stoppen nicht mehr steuerbarer Tasks.