課題の作成が Jira サーバーの attempt timed out エラーで失敗する
症状
検索結果やフィルターに、最近更新された課題が表示されない。
ユーザーが新しい課題を作成しようとすると、Jira アプリケーションがタイムアウトする
ログに次のエラーが表示される。
ERROR [jira.issue.index.DefaultIndexManager] Wait attempt timed out - waited 30000 milliseconds
または
ERROR [jira.issue.index.DefaultIndexManager] Lock attempt timed out - waited 30000 milliseconds
また、長時間実行されているインデックス スレッドがインデックスの読み取りを待機していることも確認できる。
"ISSUE-indexQueue:thread-1" #260 prio=5 os_prio=0 tid=0x nid=0x4cd runnable [0x000]
java.lang.Thread.State: RUNNABLE
at java.io.RandomAccessFile.open0(Native Method)
at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
at java.io.RandomAccessFile. (RandomAccessFile.java:243)
at org.apache.lucene.store.MMapDirectory.openInput(MMapDirectory.java:214)
at org.apache.lucene.index.CompoundFileReader. (CompoundFileReader.java:64)
at org.apache.lucene.index.SegmentCoreReaders. (SegmentCoreReaders.java:67)
at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:114)
at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:702)
- eliminated 0x00007f70e2000000> (a org.apache.lucene.index.IndexWriter$ReaderPool)
at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:677)
- locked <0x0000> (a org.apache.lucene.index.IndexWriter$ReaderPool)
at org.apache.lucene.index.BufferedDeletesStream.applyDeletes(BufferedDeletesStream.java:249)
- locked <0x000000020> (a org.apache.lucene.index.BufferedDeletesStream)
at org.apache.lucene.index.IndexWriter.doFlush(IndexWriter.java:3571)
- locked <0x01f00> (a org.apache.lucene.index.IndexWriter)
at org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:3508)
at org.apache.lucene.index.IndexWriter.prepareCommit(IndexWriter.java:3371)
at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3444)
- locked <0x0088> (a java.lang.Object)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3426)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3410)
at com.atlassian.jira.index.WriterWrapper.commit(WriterWrapper.java:115)
診断
このエラー メッセージのテキストは変更されました。atlassian-jira.log
で "attempt timed out - waited" を検索します。これはエラー メッセージの両方のバージョンに含まれます。
Jira が再インデックスを行っているときに、DVCS ジョブがエラーを報告している場合があります。これに該当する場合、問題はありません。再インデックス タスクが完了すると、ジョブは通常の状態に戻ります。
原因
課題が作成または更新されると、Jira アプリケーションは Lucene インデックスのロックを取得します。ほかのユーザーが同じタイミングで更新を行おうとして、ロックが 30 秒以内に解放されない場合、エラーが生成されます。これは次のような原因によって発生します。
- インデックスが NFS でリモート ストレージにマウントされている。これはサポート対象ではありません (「サポート対象プラットフォーム」)。
- 低速なディスクのシステムで Jira アプリケーションを使用している。
- アンチウィルス製品によってディスク アクセスが遅延し、この問題が発生する場合があります。
- データベースが過負荷状態にある可能性があります。Lucene はインデックスの作成時にデータベースへのアクセスを試みます。レスポンスを待機している場合、インデックスの所要時間が増え、タイムアウトにつながる可能性があります。
- ガベージ コレクションや処理量が多いスレッドによって CPU が過負荷状態になり、スレッドが CPU で競合状態になって Jira アプリケーションの処理が低速になる場合があります。
- Jira アプリケーションとデータベースとの間のネットワークが遅い可能性があります。これにより、Jira のインデックスを作成するためのデータベースの読み取りが低速になります。
- アドオンが計算するカスタム フィールドは再インデックスに長い時間を要します。
回避策
インデックスのロック待機時間を増加させることができますが、これは問題を解決するための理想的な方法ではありません。この方法はスレッドの待機時間を増加させ、Jira アプリケーションからのレスポンス時間も増加させます。タイムアウトを増加させるのではなく、スレッドがタイムアウトしている理由を特定することが推奨されます。
- インデックスが NFS でマウントされていないことを確認します。これはサポート対象外で、インデックスはローカル ディスクを使用している必要があります。
- アプリケーションをシャットダウンします。
- アンチウィルス製品を実行している場合、インデックスが保存されている
$JIRA_HOME/caches
を除外するように設定します。 jira-config.properties ファイル (Jira 4.4.x 以降) または jira-application.properties ファイル (Jira 4.3.x 以前) の次のエントリを編集することで、問題を軽減します。
jira.index.lock.waittime
waittime を 30000 ms から 90000 ms に増加させてみます。
Jira アプリケーションを再インデックスします。
ロックの解放の待機時間が追加されているため、再インデックス ジョブには通常よりも長い時間がかかる可能性がある点にご注意ください。
ソリューション
- インデックスが NFS でマウントされていないことを確認します。これはサポート対象外で、インデックスはローカル ディスクを使用している必要があります。
アンチウィルス製品を使用している場合、
$JIRA_HOME/caches
を除外するルールを設定することで、Jira アプリケーションのインデックスのスキャンを無効化します。Jira アプリケーション サーバーで Symantec が実行されている場合、この製品が除外設定どおりに動作しない問題が報告されています。この問題が発生しているかどうかを、除外を設定する前後でディスク速度をテストすることで検証してください。問題が続く場合、製品を置き換える必要がある可能性があります。
- サーバーが低速な場合、アップグレードを検討することができます。評価のヒントについては「ディスク アクセス速度のテスト」および「Jira の要件」をご確認ください。
(Only applies to JIRA 5.1.5 and earlier) Disable the Index Optimisation Job, as in our (Archived) How to Disable the Index Optimization Job in JIRA KB.
- 権限スキームを変更し、課題の一括変更が発生する頻度を減らします。「プロジェクト権限の管理」をご確認ください。
- 「Jira メモリを追加する」に従い、インスタンスのメモリ設定を増加させます。
- アドオンが計算するカスタム フィールドの監査を行い、次のいずれかを行います。
- 計算が不要な場合はタイプを計算しないものに変更
- フィールドをユーザーが検索する必要がない場合はフィールドをインデックスから削除