2012-03-06 5 views
3

Linux(Erlang R14B 03)でejabberd 2.1.10サーバを実行しています。 ツールをバッチで使用してXMPP接続を作成し、ランダムにメッセージを送信しています。 ejabberdはほとんどの接続を受け入れています。 接続が連続的に増加しているにもかかわらず、 のerlang:memory(total)の値が範囲内にあることが確認されています。
しかし、topコマンドを使用してejabberdプロセスのメモリ使用量を確認すると、ejabberdプロセスによるメモリ使用量が継続的に増加していることがわかります。ejabberd:erlangとLinuxプロセスのメモリの差

erlang:memory(total)とtopコマンドで表示されるメモリ使用量の差が連続的に増加していることがわかります。

表示されているメモリの違いの理由を教えてください。 メモリリークのためですか?とにかくこの問題をデバッグできますか? メモリリークでない場合、追加メモリ(erlang & topコマンドの違い)は何のために使用されますか?

答えて

2

Erlang VM自体またはejabberdのErlang以外の部分でメモリリークが発生すると、説明したような効果があります。 ejabberdにはいくつかのNIFが含まれています - ejabberd-2.1.10には10個の ".c"ファイルがあります。

あなたのejabberdは " - enable-nif"で設定されましたか? そうなら、 "--disable-nif"を使ってビルドされたバージョンと比較して、メモリ使用状況が異なるかどうかを確認してください。

その他の可能性として、Valgrindを使用してリークを検出して特定する方法があります。 (私はErlang VM上で使用しようとはしていませんでしたが、多くの誤検出があるかもしれませんが、少しの運があればサイズやソースのいずれかで漏れが目立つでしょう)

最後の注記: Erlangプロセスのヒープが断片化されている可能性があります。割り当て内のギャップは、OSプロセスのサイズに関係します。 erlangに含まれているようには見えません:メモリ(合計)。

関連する問題