Wie stelle ich „MaxPermSize“ für Atlassian Fisheye/Crucible ein, das als Dienst unter Win2k3 ausgeführt wird?

Wie stelle ich „MaxPermSize“ für Atlassian Fisheye/Crucible ein, das als Dienst unter Win2k3 ausgeführt wird?

Ich versuche seit zwei Wochen, Atlassian Fisheye/Crucible als Dienst unter Win 2K3 R2 einzurichten. Ich erhalte ständig verschiedene „java.lang.OutOfMemoryError: PermGen space“-Fehler, die Fisheye zum Absturz bringen und mich zwingen, den Dienst neu zu starten.

Ich bin gefolgt vonBeispielauf der Atlassian-Support-Site, um MaxPermSize innerhalb des Service Wrappers zu konfigurieren. Wenn ich jedoch SysInfo auf den Fisheye-Admin-Seiten und im Debug-Protokoll überprüfe, sehe ich keine Bestätigung. Die Java Heap-Informationen sind an beiden Stellen vorhanden, daher würde ich erwarten, dass die MaxPermSize-Einstellung an beiden Stellen angezeigt wird.

Der Fehler besteht weiterhin und der Atlassian-Support konnte kaum helfen.

Ich bin für jede Hilfe dankbar.

Antwort1

Sie können dies in Ihrer Wrapper.conf-Datei festlegen. Hier ist meine Konfigurationsdatei, und sie funktioniert bei mir hervorragend. Ich verwende sie mit Fisheye 2.6.3 unter Windows Server 2008 R2. Diese Datei ist größtenteils identisch mit der Beispiel-/Standardkonfiguration, mit einigen wichtigen Ergänzungen, die ich am Ende kommentieren werde.

#********************************************************************
# Wrapper-Eigenschaften
#********************************************************************
# Arbeitsverzeichnis
wrapper.working.dir=../../

# Java-Anwendung
wrapper.java.command=C:\Programme\Java\jdk1.6.0_25\bin\java.exe

# Java-Hauptklasse. Diese Klasse muss die WrapperListener-Schnittstelle implementieren
# oder garantieren, dass die WrapperManager-Klasse initialisiert wird. Helfer
# Klassen werden bereitgestellt, um dies für Sie zu tun. Siehe den Abschnitt Integration
# der Dokumentation für Einzelheiten.
wrapper.java.mainclass=com.cenqua.fisheye.FisheyeServiceWrapper

# Java Classpath (include wrapper.jar) Fügen Sie Klassenpfadelemente hinzu als
# erforderlich, beginnend bei 1 (ZUERST die Bibliothek hinzufügen, damit die Log4j-Konfiguration zuerst geladen wird)
wrapper.java.classpath.1=./fisheyeboot.jar
wrapper.java.classpath.2=wrapper/lib/*.jar

# Java-Bibliothekspfad (Speicherort von Wrapper.DLL oder libwrapper.so)
wrapper.java.library.path.1=wrapper/lib
wrapper.java.library.path.2=lib/native/linux-i386
wrapper.java.library.path.3=lib/native/osx-ppc
wrapper.java.library.path.4=lib/native/solaris-sparc
wrapper.java.library.path.5=lib/native/win32-x86


# Zusätzliche Java-Parameter
wrapper.java.additional.1=-server
wrapper.java.additional.2=-showversion
wrapper.java.additional.3=-Djava.awt.headless=true

# JDK 1.5 Zusätzliche Parameter für jmx
wrapper.java.additional.4=-Dcom.sun.management.jmxremote
wrapper.java.additional.5=-Dcom.sun.management.jmxremote.port=4242
wrapper.java.additional.6=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.password.file=./wrapper/jmxremote.password
wrapper.java.additional.10=-Dwrapper.mbean.name="wrapper:Typ=Java Service Wrapper Control"
wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin\.."
wrapper.java.additional.12=-XX:MaxPermSize=256m
wrapper.java.additional.13=-Xrs
wrapper.java.additional.14=-Dfile.encoding=UTF-8


# Anfängliche Java-Heap-Größe (in MB)
wrapper.java.initmemory=64

# Maximale Java-Heap-Größe (in MB)
wrapper.java.maxmemory=1024

# Anwendungsparameter. Fügen Sie bei Bedarf Parameter hinzu, beginnend bei 1
# Der erste Anwendungsparameter ist der Name der Klasse, deren Haupt
# Methode soll aufgerufen werden, wenn die Anwendung gestartet wird. Die Klasse
# Auf den Namen folgt die Anzahl der Parameter, die an den Hauptserver übergeben werden sollen.
# Methode. Dann kommen die eigentlichen Parameter.

wrapper.app.parameter.1=com.cenqua.fisheye.FishEyeCtl
wrapper.app.parameter.2=1
wrapper.app.parameter.3=Start

# Den Startparametern folgt der Name der Klasse, deren Haupt
# Methode soll aufgerufen werden, um die Anwendung zu stoppen. Der Name der Stopp-Klasse
Auf # folgt ein Flag, das steuert, ob der Wrapper
# Warten Sie, bis alle Nicht-Daemon-Threads abgeschlossen sind, bevor Sie die JVM beenden.
# Hinter dem Flag folgt die Anzahl der Parameter, die an den
# stoppt die Hauptmethode der Klasse. Zum Schluss kommen die eigentlichen Parameter.
wrapper.app.parameter.4=com.cenqua.fisheye.FishEyeCtl
wrapper.app.parameter.5=true
wrapper.app.parameter.6=1
wrapper.app.parameter.7=Stopp

#********************************************************************
# Wrapper-Protokollierungseigenschaften
#********************************************************************
# Ausgabeformat für die Konsole. (Formate finden Sie in der Dokumentation)
wrapper.console.format=M

# Protokollebene für Konsolenausgabe. (Protokollebenen finden Sie in der Dokumentation)
wrapper.console.loglevel=INFO

# Für die Wrapper-Ausgabeprotokollierung zu verwendende Protokolldatei.
wrapper.logfile=var/log/wrapper.log

# Ausgabeformat für die Protokolldatei. (Formate finden Sie in der Dokumentation)
wrapper.logfile.format=LPTM

# Protokollebene für die Protokolldateiausgabe. (Informationen zu Protokollebenen finden Sie in der Dokumentation.)
wrapper.logfile.loglevel=INFO

# Maximale Größe, die die Protokolldatei erreichen darf, bevor
# das Protokoll wird gerollt. Die Größe wird in Bytes angegeben. Der Standardwert
# von 0, deaktiviert das Log-Rolling. Kann mit dem 'k' (kb) abgekürzt werden oder
# Suffix „m“ (mb). Beispiel: 10m = 10 Megabyte.
wrapper.logfile.maxsize=50m

# Maximale Anzahl an gerollten Logdateien, die erlaubt sind, bevor alte
# Dateien werden gelöscht. Der Standardwert 0 bedeutet keine Begrenzung.
wrapper.logfile.maxfiles=10

# Protokollebene für die Ausgabe des System-/Ereignisprotokolls. (Informationen zu den Protokollebenen finden Sie in der Dokumentation.)
wrapper.syslog.loglevel=KEINE

#********************************************************************
# Wrapper-Windows-Eigenschaften
#********************************************************************
# Zu verwendender Titel beim Ausführen als Konsole
wrapper.console.title=Fischauge

#********************************************************************
# Wrapper Windows NT/2000/XP-Diensteigenschaften
#********************************************************************
# WARNUNG - Ändern Sie keine dieser Eigenschaften, wenn eine Anwendung
# mithilfe dieser Konfigurationsdatei wurde es als Dienst installiert.
# Bitte deinstallieren Sie den Dienst, bevor Sie diesen Abschnitt ändern.
# Der Dienst kann dann neu installiert werden.

# Name des Dienstes
wrapper.ntservice.name=Fischauge

# Anzeigename des Dienstes
wrapper.ntservice.displayname=Fischauge

# Beschreibung des Dienstes
wrapper.ntservice.description=Fischauge

# Dienstabhängigkeiten. Fügen Sie bei Bedarf Abhängigkeiten hinzu, beginnend bei 1
wrapper.ntservice.dependency.1=

# Modus, in dem der Dienst installiert wird. AUTO_START oder DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Erlauben Sie dem Dienst, mit dem Desktop zu interagieren.
wrapper.ntservice.interactive=false

Bemerkenswerte Zeilen

wrapper.java.command=C:\Programme\Java\jdk1.6.0_25\bin\java.exe

Vollständiger Pfad zur ausführbaren Datei des JDK-Hotspot-Servers. Beachten Sie, dass Sie das vollständige JDK und nicht nur die JRE herunterladen müssen.

wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin.."
wrapper.java.additional.12=-XX:MaxPermSize=256m
wrapper.java.additional.13=-Xrs
wrapper.java.additional.14=-Dfile.encoding=UTF-8

Keines der oben genannten Elemente ist in der Atlassian-Dokumentation aufgeführt. Ich habe diese Elemente im Laufe der Zeit durch Ausprobieren hinzugefügt. Wenn FeCru zum ersten Mal unter dem Service Wrapper gestartet wird, kann es mit einem Speicherfehler anhalten. Die Zeile „MaxPermSize“ behebt dies.

Ich habe auch festgestellt, dass es notwendig ist, FISHEYE_INST wie oben gezeigt anzugeben. Ich habe keine Ahnung, warum der Pfad /..am Ende mit angegeben wird, in dem Beispiel, das ich gefunden habe, war es so. Zweifellos irgendein verrücktes Linux-Ritual. Bei den anderen Zeilen kann ich mich nicht erinnern, wofür sie waren, aber ich habe sie aus irgendeinem Grund hinzugefügt und nicht dokumentiert, warum. Niemand ist perfekt ;-)

wrapper.java.initmemory=64 wrapper.java.maxmemory=1024

Die Heap-Speicherzuweisungen wurden gegenüber den Standardeinstellungen erhöht. Ich indexiere einige recht umfangreiche Repositories und konnte mir die zusätzlichen Ressourcen leisten. Möglicherweise kommen Sie mit den standardmäßig kleineren Zuweisungen aus.

verwandte Informationen