PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Setzen von Parameter in JNLP-Datei


Eminent
2007-07-09, 11:24:38
Hallo alle zusammen,

da bei unserer Anwendung (Java) immer mal wieder ein Speicherbereich (Perm-Speicher) voll läuft (führt zum Absturz der Anwendung), möchte ich die PermSize beim Starten er Anwendung erhöhen. Funktionieren soll das Ganze analog zum Setzen der HeapSize, nur leider finde ich nirgends ob ich den Wert jetzt richtg setze.

Habe es jetzt so gemacht:

<j2se version="1.4" initial-heap-size="16m" max-heap-size="96m" perm-size="4m" max-perm-size="24m"/>

Der Eintrag für die HeapSize ist auf jeden Fall richtig und wirkt auch (kann man über Runtime#freeMemory() usw. abfragen). Nur hab ich leider keine Möglichkeit gefunden abzufragen ob er die PermSize so dann auch richtig setzt.

Kann mir vielleicht jemand von euch weiter helfen?

Vielen Dank schon mal für eure Mühen

Gruß
Eminent

HellHorse
2007-07-10, 22:32:40
Hallo alle zusammen,

da bei unserer Anwendung (Java) immer mal wieder ein Speicherbereich (Perm-Speicher) voll läuft (führt zum Absturz der Anwendung), möchte ich die PermSize beim Starten er Anwendung erhöhen.
Ich würde mal lieber untersuchen, warum du so viel Perm-Gen brauchst. Entweder du lädst verdammt viele Klassen (so um die 15'000) oder du interest Strings wie blöd (was sehr pöse ist):

<j2se version="1.4" initial-heap-size="16m" max-heap-size="96m" perm-size="4m" max-perm-size="24m"/>
24 MiB ist doch recht konservativ wenn die default Grösse nicht reicht.

Der Eintrag für die HeapSize ist auf jeden Fall richtig und wirkt auch (kann man über Runtime#freeMemory() usw. abfragen). Nur hab ich leider keine Möglichkeit gefunden abzufragen ob er die PermSize so dann auch richtig setzt.
JConsole anhängen

Eminent
2007-07-11, 07:59:16
Hi HellHorse,

danke für deine Antwort.

Optimierungspotential würde in der Anwendung sicher bestehen, aber alles hier zusammenzufassen usw. würde einfach zu lange dauern. :biggrin:

Kurz gesagt wir haben keine 15.000 Klassen (sollten schätzungsweise max. 3.000 bis 4.000 sein, vielleicht 5.000) und was in anderen Modulen der Anwendung (für die wir hier nicht zuständig sind) sonst so passiert weis ich größten teils leider nicht.

Für mich ist an dieser Stelle auf jeden Fall leider (auch wenn es nur eine vorläufige Lösung wäre) die Erhöhung der PermSize die einzige "schnelle" Möglichkeit.

Du schreibst was von JConsole anhängen. Woher bekomme ich das? Im JDK 1.4.2 (wird bei uns verwendet), gibt es eine solche Klasse nicht. Oder gibt das die Runtime her und ich hab nur nicht verstanden, was genau du meinst? :D

Vielen Dank schon mal

Gruß
Eminent

HellHorse
2007-07-11, 19:36:26
Hi HellHorse,

danke für deine Antwort.

Optimierungspotential würde in der Anwendung sicher bestehen, aber alles hier zusammenzufassen usw. würde einfach zu lange dauern. :biggrin:

Kurz gesagt wir haben keine 15.000 Klassen (sollten schätzungsweise max. 3.000 bis 4.000 sein, vielleicht 5.000) und was in anderen Modulen der Anwendung (für die wir hier nicht zuständig sind) sonst so passiert weis ich größten teils leider nicht.
Da kann schon was zusammenkommen je nach dem was für Frameworks und Libraries ihr da so verwendet.
Für mich ist an dieser Stelle auf jeden Fall leider (auch wenn es nur eine vorläufige Lösung wäre) die Erhöhung der PermSize die einzige "schnelle" Möglichkeit.

Du schreibst was von JConsole anhängen. Woher bekomme ich das?
Ab JDK 1.5 (oder Java SDK, oder Java 2 ...) unter /bin. Ab 1.6 musst du die Anwendung nicht mal mehr mit speziellen Argumenten starten. Die 1.6er lässt ja auch 1.4 Code laufen, kannst also zu Testzwecken das Teil mit 1.6 starten und dann wieder auf 1.4 umschwenken.

Eminent
2007-07-12, 06:46:13
Hi,

besten Dank, hab mir jetzt mal Java6u1 installieren lassen und werd mir das Ganze mal ansehen. Bin ja mal gespannt was sich da so zeigt!

Vielen Dank nochmal

Gruß
Eminent

Eminent
2007-07-16, 11:07:06
So, nachdem ich jetzt endlich mal dazu gekommen bin mir das Ganze zumindest etwas anzuschauen habe ich dank der JConsole gesehen, dass meine, in der JNLP, gesetzten Parameter für HeapSize und PermSize leider nicht alle ziehen. Es werden zwar die Parameter für die HeapSize richtig gesetzt, die Parameter für die PermSize ignoriert er jedoch. Ich vermute mal, dass mein Setzen hier in der JNLP falsch ist. Leider finde ich aber nirgends etwas, wie ich den Parameter setzen muss.

Kann mir von euch vielleicht noch einer helfen? :confused:

Mein Aufruf sieht jetzt so aus

<j2se version="1.6" initial-heap-size="16m" max-heap-size="100m" perm-size="4m" max-perm-size="100m"/>

Wobei ich die MaxPermSize nur so groß gemacht habe um in der JConsole deutlich zu sehen ob der Wert so auch gesetzt wird (was er wie gesagt ja leider nicht wird).

Vielen Dank schon mal für eure Mühen.

Berni
2007-07-16, 13:00:07
Also laut der Doku unter http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/syntax.html musst du wohl
java-vm-args="-XX:MaxPermSize=128m"
setzen!

Eminent
2007-07-17, 05:39:59
Also laut der Doku unter http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/syntax.html musst du wohl

setzen!

Gut, dass ich das mal wieder nicht gefunden hab!! :frown:

Naja, wie dem auch sei ... vielen DANK für Hilfe!!!

Edit: Funktioniert so auch wunderbar!! Danke nochmal!!