Jira サーバーの Too many open files エラー
症状
Jira アプリケーションの複数の領域で機能が全体的に悪化する。
atlassian-jira.log
ログに次のエラーが表示される。
java.io.IOException: java.io.IOException: Too many open files
現在のオープン ファイル ハンドラの上限を確認するには、次のコマンドを実行します。
ulimit -aS | grep open
その後、次のような行を確認します。
open files (-n) 2560
原因
UNIX システムでは、任意の 1 つのプロセスで同時にオープン可能なファイルの数に制限があります。ほとんどのディストリビューションのデフォルトは 1024 ファイルで、Jira アプリケーションの構成によってはこの数字は小さすぎます。この上限に達すると、上記の例外が生成され、Jira アプリケーションは現在の操作の完了に必要なファイルを開けないために動作に失敗します。
この挙動を発生させることが確認されているアプリケーション バグがあります。
- - JRA-29587課題詳細を取得中... ステータス
- - JRA-35726課題詳細を取得中... ステータス
- - JRA-39114Getting issue details... STATUS (affects JIRA 6.2 and higher)
- JRASERVER-68653 - 課題詳細を取得中... ステータス
Jira アプリケーションでの処理を改善する、次の改善リクエストがあります。
ソリューション
これらの変更は、Jira の開始時に組み込みの initd スクリプトを利用しているインストールでのみ機能します。systemd (Linux OS 用の最新バージョン) 用のカスタムのビルド サービスを利用しているインストールの場合、対象の systemd サービスで次のように変更を直接適用する必要があります。
[Service]
LimitNOFILE=20000
ほとんどの場合、Jira の setnenv.sh で ulimit を設定すると効果があります。
$JIRA_HOME/caches/indexes
フォルダが NFS でマウントされている場合はローカル マウントに移動します (Jira インスタンスと同じサーバー上のストレージ)。Jira アプリケーションのサポート対象プラットフォームにあるように NFS はサポートされておらず、NFS が利用されていると、この問題が非常に頻繁に発生します。- Jira アプリケーションを停止します。
$JIRA_INSTALL/bin/setenv.sh
を編集し、次の内容をファイル上部に含めます。ulimit -n 16384
これにより、Jira アプリケーションが開始されるたびにこの値が設定されます。ただし、Jira アプリケーションのアップグレードを行う際は手動の移行が必要です。
- Jira アプリケーションを開始します。
/proc/<pid>/limits
を実行することで変更を確認できます。ここで <pid> はアプリケーションのプロセス ID です。
If you are using a JIRA application version with the bug in - JRA-29587Getting issue details... STATUS , upgrade it to the latest version. If using NFS, migrate to a local storage mount.
一部のオペレーティング システムでは、制限の設定用に追加の構成が必要な場合があります。たとえば Ubuntu のユーザーは次の手順に従います (詳細についてはご利用のオペレーティング システムのマニュアルをご確認ください)
- 次のコマンドで limits.conf ファイルを変更します。
sudo vim /etc/security/limits.conf Jira アプリケーションを実行するユーザーについて次の内容を追加します。組み込みのインストーラーを利用した場合、これは
jira
になります。limits.conf#<domain> <type> <item> <value> # #* soft core 0 #root hard core 100000 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #ftp - chroot /ftp #@student - maxlogins 4 jira soft nofile 16384 jira hard nofile 32768
common-session ファイルを次のように変更します。
sudo vim /etc/pam.d/common-session
common-session
は debian/ubuntu でのみ提供されるファイルです次の行を追加します。
common-session# The following changes were made from the JIRA KB (https://confluence.atlassian.com/display/JIRAKB/Loss+of+Functionality+due+to+Too+Many+Open+Files+Error): session required pam_limits.so
- Jira サーバー アプリケーションを再起動します。
非常に大規模なインスタンスの場合、Jira アプリケーションのスケールについては当社のパートナーにご相談いただくことをおすすめします。Jira のクラスタリングやロード バランサについての記事をご確認ください。
診断
オープンなままのファイルを特定するには lsof +L1
コマンドを利用できます。これにより、次のようなオープンなファイルの一覧を取得できます。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
java 2565 dos 534r REG 8,17 11219 0 57809485 /home/dos/deploy/applinks-jira/temp/jar_cache3983695525155383469.tmp (deleted)
java 2565 dos 536r REG 8,17 29732 0 57809486 /home/dos/deploy/applinks-jira/temp/jar_cache5041452221772032513.tmp (deleted)
java 2565 dos 537r REG 8,17 197860 0 57809487 /home/dos/deploy/applinks-jira/temp/jar_cache6047396568660382237.tmp (deleted)
上記のソリューションが動作しない場合はアトラシアン サポートで詳細な調査を行うことができます。調整を依頼するには次のものをアトラシアン サポートに提供してください。
lsof +L1 > open_files.txt
によって生成されたファイル。このコマンドは、Jira ユーザーまたはファイルを閲覧可能なユーザーが実行している必要があります。たとえば、Jira が
root
として実行されている場合 (これは推奨されません)、jira
としてコマンドを実行してもオープンなファイルは表示されません。- 例外が返されたタイミングで取得されたヒープ ダンプ。詳細については「ヒープ ダンプの生成」をご確認ください。
- Jira アプリケーションのサポート zip