J2SEE 1.3 od Sunu v SuSE Linuxu 6.4 nefunguje

Supportní databáze (j2see13)
Platí pro

SuSE Linux: Verze 6.4


Kernel: Verze 2.2.14.SuSE

J2SEE 1.3 od Sunu v SuSE Linuxu 6.4 nefunguje

Vztahuje se na

SuSE Linux: verze 6.4
Jádro: verze 2.2.14.SuSE

Symptomy:

Při startu některého z programů J2SEE od Sunu se ukončí s chybovým hlášením Segmentation Fault.

Příčina:

Přičina je relativně komplikovana, a proto ji zde pouze nastíníme:

Ve VM existuje pro každý proces tzv. Heap a Stack. Tyto dvě oblasti se mohou nacházet velice blízko sebe.


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

Když budeme vycházet z výše uvedé situace, kdy je register ESP na pozici X a potom jezavolána funkce, která rezervuje množství GAP*PAGE_SIZE paměti a ještě si rezervuje pár dalších KB tak, že registr ESP ukazuje na pozici Y, což vede ke zničení Heap paměti.

Chyby, které takto vznikají, je možné odstranit pouze s maximálními obtížemi nebo je to úplně nemožné. Z tohoto důvodu zabudovala SuSE rozšíření do jádra, které zajišťuje dostatek místa mezi Heap a Stack, a tím také nemožnost Segmentation Fault.

Implicitně je tato hodnota nastavena na 128, jejichž jednotkou je tzv. Page (4096 Bytů), takže hodnota 128 znamená velikost 512 kB.

Pro J2SEE od Sunu je tato hodnota příliš vysoká.

Zaměstnanci spol. Sun, kteří spolupracovali na projektu Java Linux, kteří reagovali vstřícně na tuto novou schopnost, navrhli nastavení této hodnoty ze 128 na 10.

Úplná deaktivace je možná přiřazením hodnoty 0.

Řešení:

Můžete nastavit tzv. GAP, který má v SuSE Linuxu 6.4 hodnotu 128, na nižší úroveň, například 10, následujícím způsobem:

echo 10 > /proc/sys/vm/heap-stack-gap
Tato hodnota bude při každém startu systému znova přepsána. Pokud chcete tuto hodnotu nastavit trvale, je třeba napsat jako uživatel root následující příkaz:

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

Klíčová slova: JAVA, J2SEE

SDB-j2see13, Copyright SuSE Linux AG, Nürnberg, Germany - Verze: 19. Jun 2000
SuSE Linux AG - Poslední změnu: 19. Jun 2000 provedl choeger (sdb_gen 1.40.0)