JIRA の動作が遅い場合に行うべきこと

2010-09-24 (Fri)  •  By 伊藤  •  ドキュメント  •  JIRA 翻訳

今回の記事は、JIRA 4.1 管理ドキュメント「Is your JIRA Running Slowly 」の弊社翻訳版です。原文と差異がある場合は、原文の内容が優先されます。

JIRA が以前のバージョンに比べ反応が遅くなったり、タスクによっては実行に時間がかかる場合、このページの以下の指示に従ってください。

1. JIRA の調整

JIRA の実行速度を改善したり、あなたが抱えている問題を実際に解決する可能性がある パフォーマンスに関するヒント が多数あります。

2. 情報の収集

JIRA の調整の効果がない場合、何が遅いのか、またその原因は何なのかを的確に追求する必要があります。

1) プロファイリング

JIRA が何に時間を費やしているのかを調べてみましょう。

JIRA は独自のビルトイン プロファイル ツールを備えています。これにより、JIRA が各リクエストの処理にどれだけの時間がかかっているか、また、時間がかかっているリクエストは何かを把握できます。

このツールは消費時間のツリーをある種の手法でログ作成し、その出力は以下のようになります。

[Filter: profiling] Turning filter on [jira_profile=on]
[116ms] - /secure/Dashboard.jspa
  [5ms] - IssueManager.execute()
    [5ms] - IssueManager.execute()
      [5ms] - Searching Issues
  [29ms] - IssueManager.execute()
    [29ms] - IssueManager.execute()
      [29ms] - Searching Issues
        [28ms] - Lucene Query
          [23ms] - Lucene Search

2) スレッド ダンプ

JIRA が特定の操作 (課題の作成など) の実行に時間がかかる場合、JVM の完全なスレッド ダンプの取得が役に立つ場合があります。これにより、何が実際に実行されているのかを特定することができます。

たとえば、課題の作成に時間がかかる場合、課題の作成を実行し、その処理を待つ間に数秒ごとにスレッド ダンプを実行します (20 秒かかる処理の場合、5 スレッド ダンプ程度あると役立ちます)。

3) サーバーが何をしているか

通常、処理速度が低下しているときはサーバーがどのように対処しているかの特定が役立ちます。特に CPU 使用率およびメモリ スワップは重要です。

*nix でこれを行うには、以下のコマンドを使用します。

vmstat 1 > vmstat.log

これにより、すべての結果が vmstat.log と呼ばれるファイルに保存されます。

このファイルはハード ディスク容量を消費するため、後でこれをオフすることを忘れないでください。

Windows の場合、サード パーティ製ツールを使用するか、システム プロパティ ウィンドウから大まかに把握することができます。また、システム リソースとその使用状況のログを Windows Performance Manager で取得することもできます。

4) ガベージ コレクション

Verbose ガベージ コレクションは、JAVA がガベージ コレクションをいつ実行しているのか、どれぐらい時間がかかっているのか、そしてどの程度のメモリが解放されたのかを示すログ ステートメントを生成します。Verbose ガベージ コレクションを有効にするには、JAVA オプションの更新と以下のオプションの追加を行います。

-XX:+PrintGCTimeStamps -verbose:gc -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError

これらのオプションを追加して再起動した時点で、-Xloggc パラメーターで指定したログは、メモリ使用量に関する情報を記録します。この情報は GCViewer などのツールを使用して解析できます。

5) データベース接続プール

お使いの JIRA インスタンスで接続数が少ない、もしくはない可能性があります。この場合、JIRA のハングアップやパフォーマンスの極端な低下の原因になります。この種の動作を確認する最善の方法は、スレッド ダンプを使用することです。以下のスニペットは、この問題を示すスレッド ダンプの例です。

"Thread-4" prio=6 tid=0x16d85988 nid=0xe20 in Object.wait() [0x17d9f000..0x17d9fce8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x04139d18> (a org.apache.tomcat.dbcp.pool.impl.GenericObjectPool)
        at java.lang.Object.wait(Object.java:474)
        at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:748)
        - locked <0x04139d18> (a org.apache.tomcat.dbcp.pool.impl.GenericObjectPool)
        at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
        at org.ofbiz.core.entity.transaction.JNDIFactory.getJndiConnection(JNDIFactory.java:168)
        at org.ofbiz.core.entity.transaction.JNDIFactory.getConnection(JNDIFactory.java:140)
        at org.ofbiz.core.entity.TransactionFactory.getConnection(TransactionFactory.java:99)
        at org.ofbiz.core.entity.ConnectionFactory.getConnection(ConnectionFactory.java:53)
        at com.atlassian.jira.upgrade.ConnectionKeeper.openConnections(ConnectionKeeper.java:106)
        at com.atlassian.jira.upgrade.ConnectionKeeper.run(ConnectionKeeper.java:87)

この問題を示す行は以下のとおりです。

- locked <0x04139d18> (a org.apache.tomcat.dbcp.pool.impl.GenericObjectPool)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)

この問題の軽減策は、接続プール サイズを増やすことです。これを実行するための情報はアプリケーション サーバーにより異なります。しかし、Apache Tomcat もしくは JIRA スタンドアロン版 (つまり、Apache Tomcat を使用している) を稼動している場合、以下のドキュメントの説明に従って接続プール サイズを調整できます。

3. サポートの利用

まずお断りしなければいけないことは、弊社はあらゆる点に精通しているわけではないということです。ときおり、同様のセットアップで似たような問題を抱えている他のユーザーがいます。ユーザー フォーラムにてあなたが抱えている問題について聞いてみましょう。迅速かつ的確な回答を得られるはずです。

(フォーラムを継続的に調べたにも関わらず) それでも問題が解決しない場合、サポート リクエストを作成してください。その際にご提出いただきたいのは、上記で収集したすべての情報、どの処理が遅いかの詳細な説明、およびお使いの環境に関する以下の情報です。

  1. CPU の数および速度
  2. JIRA とデータベースが同一のサーバー上にあるか
  3. アプリケーション サーバーからデータベース サーバーへの ping 時間はどれくらいか (JIRA およびデータベースが異なるサーバー上にインストールされている場合)
  4. インデックスの場所は同一サーバー上にあるか
  5. データの量はどれくらいか (管理画面の [システム] メニューから [システム情報] を選択することで確認できます。)
  6. 管理画面の [システム] メニューから [システム情報] を選択し、そこから取得した環境データのコンテンツ
  7. ログ ファイル (このファイルの場所の確認は、管理画面の [システム] メニューから [システム情報] にて行えます)
  8. 処理が遅い操作の種類 (特定のページにて発生するか?)
  9. サード パーティ製プラグインをインストールしているか

Related Articles

お気軽にお問い合わせください

お問い合わせ