2016-05-09 8 views
0

Erlang/OTP 17でEjabberd 15.04を実行していて、ejabberdを実行しているEC2 Amazonの4つすべてのインスタンスでUbuntu [64-bit]を使用しています。 Ejabberdはソースからインストールされました。私は65,535ファイルディスクリプタと、次の構成とそれを構成したEjabberdの "Failed TCP accept:emfile"

ERL_MAX_PORTS =36万

ERL_PROCESSES = 15,000,000

ERL_MAX_ETS_TABLES =10万

ことだと突然、サーバーは機能しなくなり、数百回ログに記録されました。

2016年5月9日13:22:45.901 [エラー] < 0.397.0> @ejabberd_listener:受け入れる:317(#Port < 0.4197>)は、TCPは受け入れませんでした:

EMFILE私は自分自身のモジュールと実行を行っています(Amazonの)Elastic Load Balancerの背後にある4つのerlangノードのクラスタ内でejabberdを実行します。マシンにはそれぞれ4コアと30ギガバイトのRAMがあります。 ロスターモジュールをODBC(MariaDB、mysqlと似ています)に移行しました。そして、80kのユーザーが同時に接続されています。

私は、ファイル記述子が十分に高く、プロセスとポートもerlangだと思います。 このエラーは突然現れ、サーバーは3週間正常に動作しました。おそらく原因はmysqlと関係がありますか?あなたが原因が何であるか知っていれば、私はとても幸せになるでしょう。

ありがとうございます。

+0

セットNOFILE(開いているファイルの最大数)#に –

答えて

0

あなたがでアーランの現在の最大値を取得することができ、開いているファイル記述子の制限を大きくする必要があります、それはOSに設定された値と同じではありませんし、あなたのソフトウェアは成り上がりスクリプトによって起動されている場合は

proplists:get_value(max_fds, erlang:system_info(check_io)). 

あなたがlimit stanzaを使用して成り上がりスクリプトでファイル記述子の制限を設定していることを確認します

limit nofile 65535 65535 
+0

/etc/security/limits.confを私はそれをチェックしました、それは大丈夫です。問題は解決しません。 – lbernal