J2SEE 1.3 von Sun auf SuSE Linux 6.4 funktioniert nicht

Supportdatenbank (j2see13)
Bezieht sich auf

SuSE Linux: Version 6.4
Dieser Artikel bezieht sich auf eine ältere SuSE Linux Version. Daher ist es möglich, dass die Informationen in diesem Artikel nicht mehr auf dem neuesten Stand sind bzw. der Artikel nicht mehr funktionierende Links enthält.

Kernel: Version 2.2.14.SuSE

Symptom:

Beim Start eines beliebigen Programmes aus dem J2SEE von Sun beendet dieses sich mit einem Segmentation Fault.

Ursache:

Ist relativ kompliziert und sei hier nur oberflächlich erklärt:

In der VM eines jeden Prozesses gibt es einen sog. Heap und einen Stack. Diese beiden Bereiche können sehr nah beieinander liegen.


                |  GAP  |
        --------------------------
        | heap  |       |  stack |
        --------------------------
               Y          X

Ausgegangen von obiger Situation, in der das Register ESP auf Stelle X zeigt und dann eine Funktion aufgerufen wird, die eine Menge von GAP*PAGE_SIZE Speicher reserviert plus ein paar weitere KByte, so daß das Register ESP auf die Stelle Y zeigt, würde das zu einer Zerstörung des Heap Speichers führen.

Fehler, die auf diese Weise entstehen, sind nur schwer oder gar nicht nachvollziehbar. Aus diesem Grund hat SuSE eine Erweiterung in den Kernel eingebaut, die dafür sorgt, daß zwischen Heap und Stack ein Bereich entsteht, der einen Segmentation Fault auslöst, sobald dort hineingeschrieben wird.

Per Default steht dieser Wert auf 128, dessen Einheit eine sog. Page ist. Eine Page (engl. = Seite) ist 4096 Bytes groß, so daß der Wert 128 eine grösse von 512 kByte ergibt.

Für das J2SEE von Sun ist dieser Wert zu hoch.

Mitarbeiter von Sun, die am Java Linux Projekt mitarbeiten, reagierten positiv auf dieses Feature, schlugen jedoch vor, den Wert von 128 auf 10 zu setzen.

Vollständig deaktivieren lässt sich dieses Feature durch einen Wert von 0.

Lösung:

Sie können den sog. GAP, der bei SuSE Linux 6.4 auf einen Wert von 128 gesetzt wurde mit folgendem Befehl verringern. Ein Wert von 10 reicht hier aus:

echo 10 > /proc/sys/vm/heap-stack-gap
Dieser Wert wird nach jedem Booten wieder überschrieben. Um den Wert fest einzustellen, geben Sie einmalig als Benutzer root folgendes ein:

echo "echo 10 > /proc/sys/vm/heap-stack-gap" >> /sbin/init.d/boot.local

Stichwörter: JAVA, J2SEE

SDB-j2see13, Copyright SuSE Linux AG, Nürnberg, Germany - Version: 19. Jun 2000
SuSE Linux AG - Zuletzt generiert: 19. Jun 2000 von choeger (sdb_gen 1.40.0)