PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : java.lang.outofmemory speicher anzeigen lassen über cmd



noob222
11.01.2008, 10:29
hallo,

habe ein problem mit java.lang.outofmemory. habe hier im forum ein ähnliches problem gesehen, aber die problemlösung dort war mir klar.
mir ist klar, wie ich die heap size ändern kann.
zum beispiel: java -Xms64 -Xmx128

so weit ich das weiss ist der initial heap size (Xms) standardmäßig auf 64 mb gesetzt und der maximum heap size (Xmx) auf 128mb. Also beides sind Default-Werte.

Kennt einer von euch den Befehl unter Windows, wie ich die aktuellen Werte ablesen kann? Also auf was Xms und Xmx gesetzt sind?
würd mich schon gerne interessieren ob mein Xmx wirlich auf 128 mb gesetzt ist.


PS: Ich muss einige Änderungen an einem System durchfürhe, die auf Java zurückgreifen. Ich arbeit nicht mit Eclipse oder einem anderen Programm. Auch habe ich kein Java-Programm geschreiben.
Es ist reines Konsolenanwendung


Danke

Gruß

supersucker
11.01.2008, 10:39
Naja, du musst schon genauer beschreiben wie Anwendung + Java verzahnt ist.

Wird die Anwendung über ein Init-script gestartet?

Wenn ja, werden dort normalerweise solche Parameter festgelegt.

Wenn die Anwendung JMX-fähig ist, kannst du auch einfach im CLI die jmx-Konsole via


jconsole

aufrufen.

noob222
11.01.2008, 10:50
also es folgendes.
Das System ist komplex. In einigen Datein wird teilweise definiert, wie groß die Xmx und Xms sein müssen. Das ist mir auch klar und kann es nachvollziehen.
Diese Dateien bekommen eine bestimmte Speichergröße und können damit arbeiten. Die Parameter kann man ganz normal über ein Editor ändern und muss nur noch kompiliert werden (ähnlich wie javac beispiel.java aber nur für das System anders angepasst)

Andere Dateien (wo von ich leider keine Ahnung habe) greifen auf JVM zurück und haben anscheinend ein Problem mit dem Speicher. Diese verlangen anscheinend mehr Speicher. Aber als Fehlermeldung bekomme ich leider nur "java.lang.outofmemory".

Daher wolle ich wissen, wie die aktuellen Xms und Xmx gesetzt sind um diese eventuell zu ändern.

Konnte mich jetzt bissen deutlicher ausdrücken?


PS: Die Anwendung bezieht sich auf LDAP und die draus resultierten ldif-Dateien.

supersucker
11.01.2008, 11:54
Diese Dateien bekommen eine bestimmte Speichergröße und können damit arbeiten. Die Parameter kann man ganz normal über ein Editor ändern und muss nur noch kompiliert werden (ähnlich wie javac beispiel.java aber nur für das System anders angepasst)

Ich vermute mal, das du - nicht böse gemeint - aus Unwissenheit dich falsch ausdrückst.

Zunächst mal, reden wir hier von einer Standalone oder einer Webapplication (diese laufen nur in entsprechenden Containern wie z.b. Tomcat).

So wie du das allerdings beschreibst, ist der Ablauf unmöglich. Speicherparameter können gar nirgends "einkompiliert" werden.

Ich versuch dir das mal etwas näher zu erklären:

Irgendwie wird diese Applikation ja gestartet. Im Normalfall ist das ein Script wo irgendwo ein Aufruf folgender Art:


java -Xmx ..... -Xms meine_application.jar

Wenn die Applikation erstmal läuft, hast du - außer du kuckst eben im Startscript nach - keine Möglichkeit das rauszukriegen, außer eben JMX. (oder du verwendest einen Application-Server)

Genau für solche Fälle gibt es nämlich JMX.

Sorry, aber solange du nicht genauer beschreibst (oder beschreiben kannst) __was__ für eine Applikation das genau ist und wie sie gestartet wird, kann ich dir nicht weiterhelfen.

Ist deine Applikation z.B. eine Web-Applikation (-> Tomcat) oder gar eine J2EE-Applikation (-> Jboss usw.) sieht die Sache nämlich wieder anders aus, deshalb meine Frage von oben.

musiKk
12.01.2008, 13:35
Weiss nicht, ob ich den OP richtig verstehe, aber auslesen kann man die Groesse des Heaps relativ einfach:

MemoryMXBean runtime = ManagementFactory.getMemoryMXBean();
MemoryUsage usage = runtime.getHeapMemoryUsage();

System.out.println("usage: " + usage);
Veraendern hingegen geht natuerlich nicht.