Yellowfinのサービスを再起動した際に、下記のような症状が発生する場合があります。
- ライセンス違反になる
- 日付関数を使用したフィールドを含むレポートを開くとエラーになる
- 計算フィールドを作成する時に定義済み関数が使用できない
- ダッシュボードのカスタムHTMLの定義内容が変わっている
- レポートのフィールドが消えている
ログを確認すると、下記のようなエラーが発生している場合があります。
Caused by: java.net.SocketException: Bad file descriptor
Caused by: java.net.SocketException: Too many open files
これは、プロセスごとのオープンできるファイルディスクリプタ数が制限に達した際に発生するエラーで、LinuxサーバーにYellowfinをインストールして使用している環境で遭遇することがあります。Linuxの場合は、Yellowfinをsystemdのサービスとして起動することが多いと思います。ここでは、yellowfinというサービスで運用している場合を例に、エラーを解消するための設定について説明します。
設定方法の例
systemdのサービスとして登録するためにユニットファイル(yellowfin.service)を作成していると思います。
/etc/systemd/system/yellowfin.service
ファイルディスクリプタの上限を設定するためには、[ユニットファイル].d という名称のディレクトリに、limits.conf という名称のファイルを作成します。
sudo mkdir /etc/systemd/system/yellowfin.service.d
sudo vi /etc/systemd/system/yellowfin.service.d/limits.conf
エラーを解消するために、ファイルディスクリプタ数の上限、プロセスの同時実行数の上限を調整します。下記の例では、それぞれの上限値を65536に設定しています。
/etc/systemd/system/yellowfin.service.d/limits.conf
[Service]
# Max open files
LimitNOFILE=65536
# Max processes
LimitNPROC=65536
サービスを停止した後に起動すると設定が反映されます。