Too many open files エラー
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
問題
atlassian-confluence.log
に次のメッセージが表示される。
Caused by: net.sf.hibernate.HibernateException: I/O errors during LOB access
at org.springframework.orm.hibernate.support.AbstractLobType.nullSafeSet(AbstractLobType.java:163)
at net.sf.hibernate.type.CustomType.nullSafeSet(CustomType.java:118)
at net.sf.hibernate.persister.EntityPersister.dehydrate(EntityPersister.java:387)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:460)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:436)
at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:37)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2464)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2450)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2407)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2276)
at com.atlassian.confluence.pages.persistence.dao.hibernate.HibernateAttachmentDataDao.save(HibernateAttachmentDataDao.java:63)
... 17 more
Caused by: java.io.IOException: Too many open files
原因
Confluence で利用されているインデックス システムである Lucene では、Confluence での NFS マウントはサポートされません。NFS マウントの利用はこの挙動を発生させることが確認されています。詳細な情報を Lucene のドキュメントでご確認ください。
Confluence で開いているファイルの数が多すぎ、システムで設定されている上限に達している。UNIX システムでは、任意の 1 つのプロセスで同時にオープン可能なファイルの数に制限があります。ほとんどのディストリビューションのデフォルトは 1024 ファイルで、Confluence の構成によってはこの数字は小さすぎます。この上限に達すると、上記の例外が生成され、Confluence は現在の操作の完了に必要なファイルを開けないために動作に失敗します。
ソリューション
これを解決するには、オープンできるファイルの上限を増やす必要があります。
- Confluence をシャットダウンします。
ターミナルで次のコマンドを実行し、ご利用のシステムでのファイル ハンドラの上限数を確認します。
ulimit -aS | grep open
ファイル ハンドラの上限を設定するには、<Confluence のインストール ディレクトリ>/bin/setenv.sh ファイルに次の行を追加します。数字はアプリケーションの需要に応じて変更できます。
ulimit -n 32768
すべての制限設定はログイン時に設定されます。これらはグローバルでも永続的なものでもなく、セッションの間のみ存在します。これによって Confluence が開始されるたびに値が設定されますが、Confluence のアップグレード時には手動で移行する必要があります。永続的なソリューションについては以降をご確認ください。
その後、変更を反映するために Confluence を再起動する必要があります。
limits.conf ファイルに基づく制限
以降の手順は永続的なソリューションとして提案されており、「Jira サーバーでの Too many open files エラー」に基づいています。
root
として、/etc/security/limits.conf
ファイルを次のエントリで編集します。1 列目の値は、Confluence アプリケーションを実行している OS ユーザーを参照します。この例ではユーザーの名前はconfluence
です。confluence soft nofile 32768 confluence hard nofile 32768
値 32768 は大規模なインスタンスに推奨されますが、ご利用の環境によって異なる可能性があります。
debian
ベースの Linux ディストリビューション (Ubuntu)
など) の場合、root
として/etc/pam.d/common-session
を次のエントリで編集します。session required pam_limits.so
- サーバーを再起動します。
新しい値がアプリケーションによって使われているのを確認するため、サポート zip を取得し、
application-properties/application.xml
ファイル内で max-file-descriptor 属性を探します。<max-file-descriptor>32,768</max-file-descriptor>
Confluence が systemd サービスとしてインストールされている場合のソリューション
When Confluence is installed as a systemd service you may need to update the service file (systemd service configuration) as described below.
If you are sure Confluence is running as a systemd service, go straight to Step 2.
Confluence が systemd サービスとして構成されているかどうかを確認します。これは、問題の切り分けや、サービス名が不明な場合はその確認に役立ちます。
grep -i confluence /etc/systemd/system/*.service /lib/systemd/system/*.service
この例では、サービスの名前は
confluence.service
で、これはユニット ファイルとも同名であり、標準フォルダ/etc/systemd/system
に配置されていることがわかります。サービス ユニット ファイル (この例では
/etc/systemd/system/confluence.service
) を編集して次の行を追加します。LimitNOFILE=32768
値 32768 は大規模なインスタンスに推奨されますが、ご利用の環境によって異なる可能性があります。
Execute the following command to reload the changes or modifies the systemd unit files. These unit files are placed in the “/etc/systemd/system” directory and require reloading if any changes are made to them.
systemctl daemon-reload
4. サーバーを再起動します。
5.新しい値がアプリケーションによって使われているのを確認するため、サポート zip を取得し、application-properties/application.xml
ファイル内で max-file-descriptor 属性を探します。
<max-file-descriptor>32,768</max-file-descriptor>