
送信時に 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 などのプッシュサービスに送ることができないないため届きません。