UseConcMarkSweepGC für Linux

Forum for developers

UseConcMarkSweepGC für Linux

Beitragvon Low012 » Sa Mai 09, 2009 4:39 pm

Solaris benutzt die Option -XX:+UseConcMarkSweepGC, um den Concurrent Mark-Sweep Garbage Collector zu aktivieren. Da bei mir immer wieder lange Wartezeiten bei der GC aufgetreten sind, habe ich bei mir für Linux diesen Collector jetzt auch aktiviert. Laut Kommentar im Startskript kann es zu Problemen mit Darwin kommen. Spricht irgendwas dagegen diesen Collector für Linux zu benutzen? Ich habe das Gefühl, dass damit weniger Wartezeiten bei der GC auftreten.
Low012
 
Beiträge: 2214
Registriert: Mi Jun 27, 2007 12:11 pm

Re: UseConcMarkSweepGC für Linux

Beitragvon Orbiter » So Mai 10, 2009 12:12 pm

Das Problem bei Darwin war halt so, dass ich auf meinem Mac ziemlich oft einfach keinen Java-Prozess mehr hatte. YaCy war einfach ohne irgendeine Fehlermeldung im Log oder Terminal abgestürzt. Wie soll man so ein Problem angehen? Irgendwie bin ich halt dann darauf gekommen diesen speziellen GC zu deaktivieren, und nun keine Probleme mehr.

Bei Linux ist die Lage ein wenig schwieriger als bei Solaris und Darwin, denn bei Solaris und Darwin gibt es ein default-Java, an dem man wohl eher selten dreht, und bei Linux sucht man sich ein jre dazu aus. Bei Solaris geht es wohl immer, bei der jre bei Darwin wohl nie mit diesem GC, und bei Linux ggf. 'manchmal'.

Wenn man nun Testet ob die Option unter Linux geht, muss man das immer im Kontext mit der Java-Version machen, und den mit in Betracht ziehen ob man die Option aktiviert oder nicht. Vielleicht testen alle die Linux laufen haben die Option mal. Einfach default anstellen halte ich für ein wenig riskant, wir können das ab Version 0.81 ja mal probieren.
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: UseConcMarkSweepGC für Linux

Beitragvon Hermes » Mo Mai 11, 2009 2:44 pm

Ich habe bei mir unter Linux (Fedora 10, X86_64, Java: java version "1.6.0_0"; IcedTea6 1.4 (fedora-15.b14.fc10-x86_64) Runtime Environment (build 1.6.0_0-b14); OpenJDK 64-Bit Server VM (build 14.0-b08, mixed mode)) das Problem, dass ohne "-XX:+UseConcMarkSweepGC" oder "-Xincgc" meistens nach einigen Stunden lauter "java.lang.OutOfMemoryError: Java heap space" erzeugt, obwohl noch viel Speicher frei ist:
Code: Alles auswählen
Heap
PSYoungGen      total 373056K, used 206654K [0x00007f2a5e250000, 0x00007f2a7b7a0000, 0x00007f2a7b7a0000)
  eden space 260224K, 79% used [0x00007f2a5e250000,0x00007f2a6ac1f998,0x00007f2a6e070000)
  from space 112832K, 0% used [0x00007f2a74970000,0x00007f2a74970000,0x00007f2a7b7a0000)
  to   space 107520K, 0% used [0x00007f2a6e070000,0x00007f2a6e070000,0x00007f2a74970000)
PSOldGen        total 961216K, used 959265K [0x00007f2a237a0000, 0x00007f2a5e250000, 0x00007f2a5e250000)
  object space 961216K, 99% used [0x00007f2a237a0000,0x00007f2a5e068718,0x00007f2a5e250000)
PSPermGen       total 24192K, used 24181K [0x00007f2a18fa0000, 0x00007f2a1a740000, 0x00007f2a237a0000)
  object space 24192K, 99% used [0x00007f2a18fa0000,0x00007f2a1a73d798,0x00007f2a1a740000)

Es fällt auf, dass 200MB "from"- und "to"-Space ungenutzt sind.
Mit "-Xincgc" sieht die Speicherverteilung gleich viel besser aus.
Code: Alles auswählen
Heap
adaptive size par new generation total 38336K, used 2803K [0x00007fa9549e0000, 0x00007fa957370000, 0x00007fa957370000)
  eden space 34112K,   5% used [0x00007fa9549e0000, 0x00007fa954bc2d40, 0x00007fa956b30000)
  from space 4224K,  20% used [0x00007fa956b30000, 0x00007fa956c0a100, 0x00007fa956f50000)
  to   space 4224K,   0% used [0x00007fa956f50000, 0x00007fa956f50000, 0x00007fa957370000)
concurrent mark-sweep generation total 1464768K, used 1179620K [0x00007fa957370000, 0x00007fa9b09e0000, 0x00007fa9b09e0000)
concurrent-mark-sweep perm gen total 41444K, used 24852K [0x00007fa9b09e0000, 0x00007fa9b3259000, 0x00007fa9bb1e0000)
Hermes
 
Beiträge: 50
Registriert: Mi Jun 27, 2007 11:10 pm
Wohnort: Ratingen


Zurück zu YaCy Coding & Architecture

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron