7

同時プロセスの最大数である+Pを使用してプロセスの数(100、200、3000、....)を増やしながら、erlangサーバーの負荷テストを行い、10個のプロセスが作成された残りの部分に1つのメッセージを送信するようにしますプロセス、erlangコンソールにメッセージが表示されました:

「クラッシュダンプが書き込まれました:erl_crash.dump。eheap_alloc:298930300バイトのメモリ(タイプ「old_heap」)を割り当てることができません。異常終了」。

私はWindowsXPを使用しています。プロセスを作成するときは問題ありません(動作しています)。プロセスが通信を開始した後(hiの送信とhelloの受信)にクラッシュが発生します。これが私が抱える唯一の問題です(ちなみに、プロセスのデフォルトのヒープサイズを設定する+ hms)。

どうすればこれを解決できますか?

4

4 に答える 4

4

Crashdump Viewerを使用してそのerl_crash.dumpファイルを確認します。

/usr/local/lib/erlang/lib/observer-1.0/priv/bin/cdv erl_crash.dump

cdv.bat(Unix パスで申し訳ありません。Windows のインストールでa を見つけることができるはずです。)

プロセスリストを見てください。私の経験では、予期しない非常に長いメッセージ キューを持つプロセスがかなり頻繁に発生します。

于 2012-06-15T09:40:46.137 に答える
2

メモリが不足しています。デフォルトのヒープ サイズを小さくするか、開始するプロセスの数を制限してみてください。

より高度なソリューションには、アプリケーションのプロファイルを作成して、メモリを節約できるかどうかを確認することが含まれます。たとえば、バイナリの共有を改善したり、リストや大きなメッセージの使用を減らしたりします (これにより、送信先のすべてのプロセスにデータがコピーされます)。

于 2012-06-15T06:39:51.573 に答える
1

プロセスの 1 つが約 300MB のメモリを割り当てようとしています。サーバーでメモリリークが発生している可能性があります。適切な設計では、意図しない場合、1 つのプロセスでそれほど大きなヒープを持つべきではありません。

于 2012-06-15T09:10:16.163 に答える