2 週間にわたって、Win 2K3 R2 で Atlassian Fisheye/Crucible をサービスとしてセットアップしようとしてきました。さまざまな「java.lang.OutOfMemoryError: PermGen space」エラーが発生し続け、Fisheye がクラッシュしてサービスを再起動せざるを得なくなります。
私は例Atlassian サポート サイトで、サービス ラッパー内で MaxPermSize を構成する方法を参照してください。ただし、Fisheye 管理ページとデバッグ ログ内の SysInfo を確認しても、確認は表示されません。Java ヒープ情報は両方の場所にあるため、MaxPermSize 設定は両方の場所に表示されるはずです。
エラーは解決せず、Atlassian サポートもほとんど役に立ちませんでした。
どのような助けでも感謝します。
答え1
これは Wrapper.conf ファイルで設定できます。これが私の設定ファイルです。これは私にとってはうまく機能しています。私はこれを Windows Server 2008 R2 で実行されている Fisheye 2.6.3 で使用しています。このファイルはサンプル/デフォルト設定とほぼ同じですが、最後にコメントするいくつかの重要な追加事項があります。
#******************************************************************** # ラッパープロパティ #******************************************************************** # 作業ディレクトリ wrapper.working.dir=../../ # Javaアプリケーション wrapper.java.command=C:\Program Files\Java\jdk1.6.0_25\bin\java.exe # Javaメインクラス。このクラスはWrapperListenerインターフェースを実装する必要があります # または WrapperManager クラスが初期化されることを保証します。ヘルパー # これを実行するためのクラスが用意されています。統合セクションを参照してください 詳細についてはドキュメントの#を参照してください。 wrapper.java.mainclass=com.cenqua.fisheye.FisheyeServiceWrapper # Javaクラスパス(wrapper.jarを含む)クラスパス要素を次のように追加します。 # 1 から始める必要があります (log4j 構成が最初に読み込まれるように、最初に lib を追加します) wrapper.java.classpath.1=./fisheyeboot.jar wrapper.java.classpath.2=ラッパー/lib/*.jar # Java ライブラリ パス (Wrapper.DLL または libwrapper.so の場所) wrapper.java.library.path.1=ラッパー/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 # Java 追加パラメータ wrapper.java.additional.1=-サーバー wrapper.java.additional.2=-showversion wrapper.java.additional.3=-Djava.awt.headless=true # JDK 1.5 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:type=Java サービス ラッパー コントロール" 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 # 初期 Java ヒープ サイズ (MB) wrapper.java.initmemory=64 # 最大 Java ヒープ サイズ (MB) wrapper.java.maxmemory=1024 # アプリケーションパラメータ。必要に応じて1からパラメータを追加します。 # 最初のアプリケーションパラメータは、メインクラスの名前です。 # メソッドはアプリケーションの起動時に呼び出されます。クラス # 名前の後に、メインに渡されるパラメータの数が続きます # メソッド。次に実際のパラメータが来ます。 wrapper.app.parameter.1=com.cenqua.fisheye.FishEyeCtl wrapper.app.parameter.2=1 wrapper.app.parameter.3=開始 # 開始パラメータの後に、メインクラスの名前が続きます。 # メソッドはアプリケーションを停止するために呼び出されます。停止クラス名 # の後に、ラッパーが # JVM を終了する前に、デーモン以外のすべてのスレッドが完了するまで待機します。 # フラグの後に渡されるパラメータの数が続きます # stop クラスのメイン メソッド。最後に実際のパラメーターが来ます。 wrapper.app.parameter.4=com.cenqua.fisheye.FishEyeCtl wrapper.app.parameter.5=true wrapper.app.parameter.6=1 wrapper.app.parameter.7=停止 #******************************************************************** # ラッパーのログプロパティ #******************************************************************** # コンソールの出力形式。(形式についてはドキュメントを参照してください) wrapper.console.format=M # コンソール出力のログ レベル。(ログ レベルについてはドキュメントを参照してください) wrapper.console.loglevel=INFO # ラッパー出力ログに使用するログ ファイル。 wrapper.logファイル=var/log/wrapper.log # ログファイルの出力形式。(形式についてはドキュメントを参照してください) wrapper.logfile.format=LPTM # ログファイル出力のログレベル。(ログレベルについてはドキュメントを参照してください) wrapper.logfile.loglevel=INFO # ログファイルの最大サイズ # ログはロールされます。サイズはバイト単位で指定します。デフォルト値 # 0の場合、ログローリングが無効になります。 'k' (kb)または # 'm' (mb) サフィックス。例: 10m = 10 メガバイト。 wrapper.logfile.maxsize=50m # 古いログファイルを削除する前に許可されるロールログファイルの最大数 # ファイルが削除されます。デフォルト値 0 は制限がないことを意味します。 wrapper.logfile.maxfiles=10 # sys/イベント ログ出力のログ レベル。(ログ レベルについてはドキュメントを参照してください) wrapper.syslog.loglevel=なし #******************************************************************** # ラッパーウィンドウのプロパティ #******************************************************************** # コンソールとして実行するときに使用するタイトル wrapper.console.title=魚眼レンズ #******************************************************************** # ラッパー Windows NT/2000/XP サービス プロパティ #******************************************************************** # 警告 - アプリケーションが # この構成ファイルを使用するサービスとしてインストールされています。 # このセクションを変更する前にサービスをアンインストールしてください。 # サービスを再インストールできます。 # サービス名 wrapper.ntservice.name=フィッシュアイ # サービスの表示名 wrapper.ntservice.displayname=魚眼レンズ # サービスの説明 wrapper.ntservice.description=魚眼レンズ # サービスの依存関係。必要に応じて1から依存関係を追加します。 wrapper.ntservice.dependency.1= # サービスがインストールされるモード。AUTO_START または DEMAND_START wrapper.ntservice.starttype=AUTO_START # サービスがデスクトップと対話できるようにします。 wrapper.ntservice.interactive=false
注目すべきライン
wrapper.java.command=C:\Program Files\Java\jdk1.6.0_25\bin\java.exe
JDK 'hotspot' サーバー実行可能ファイルへのフル パス。JRE だけでなく、完全な JDK をダウンロードすることに注意してください。
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
上記のいずれも Atlassian のドキュメントには記載されていませんが、私は試行錯誤しながらこれらを時間をかけて追加してきました。FeCru がサービス ラッパーの下で初めて起動されると、メモリ不足エラーで停止することがありますが、'MaxPermSize' 行でこれを修正できます。
また、上記のように FISHEYE_INST を指定する必要があることもわかりました。パスの/..
最後に を指定する理由がわかりませんが、私が見つけた例ではそのようになっていました。間違いなく、Linux のクッキーの儀式のようです。他の行は、何のために追加したのか思い出せませんが、何らかの理由で追加し、その理由を文書化しませんでした。完璧な人はいません ;-)
wrapper.java.initmemory=64 wrapper.java.maxmemory=1024
ヒープ メモリの割り当てがデフォルトより増加しました。かなり大きなリポジトリをインデックスしているので、追加のリソースを用意する余裕があります。デフォルトの小さい割り当てで済むかもしれません。