送信時に too many open files エラーが発生した場合

BoltzEngine で同時に大量のメッセージを通知する場合、以下のようなエラーメッセージがログに記録される場合があります。

1dial tcp: lookup fcm.googleapis.com on xxx.xxx.xxx.xxx:53: dial udp xxx.xxx.xxx.xxx:53: socket: too many open files

エラーの原因

この too many open files エラーは、1つのプロセスが一定以上(ulimit -n以上)のファイルを同時に開いた場合に発生するエラーです。 BoltzEngine では、1つの通知リクエストを複数に分割して並列実行するため、ulimit -n の値が小さい場合、ネットワーク接続数が上限を超えてしまうため上記のエラーが発生します。

現在の ulimit -n 値は、/proc/(boltz slaveのPID)/limits から Max open files の値を読むと確認できます。

対応方法

エラーの原因は上記の通りのため、ulimit -n の値を増やせば回避可能です。

EL6版をお使いの場合は、/etc/init/boltz-slave.conf を以下のように修正します。

1stop on runlevel 0126
2limit nofile 4096 4096 #追加

EL7版の場合は、/etc/systemd/system/boltz-slave.service に、

1Restart always
2LimitNOFILE 4096 # 追加

を追加してサービスを再起動してください。BoltzEngine での ulimit -n 値は、4096 程度に設定することを推奨します。

大量のコネクションを利用するのはboltz-slaveだけのため、他のサービスはデフォルト値で問題ありません。

注意事項

このエラーは、1 つの通知リクエストに含まれるターゲットの一部にだけ発生します。 リクエストした結果、正常に終わったメッセージは端末に届きますが、 エラーとなったメッセージは、APNs/FCM などのプッシュサービスに送ることができないないため届きません。

ご不明な点はありませんか?

機能の詳細、導入のご検討、お見積もり依頼などは、お気軽にお問い合わせください。
担当者から追ってご連絡いたします。

お問い合わせはこちら