1

最適化が必要なレガシー Erlang プログラムがあります。このコードは、実行時に最大 20G のメモリを使用します。実行時にプロセス自体のアーラン ビーム サイズを取得する方法があるかどうか疑問に思っています。それが可能であれば、beam size>10GB の場合のように、gen_server プロセスへのすべての呼び出しを拒否することができます。助けてくれてありがとう!

4

2 に答える 2

0

シェルから呼び出すことmemory()から始めて、メモリが保持されているバイナリ、ets、プロセスなどにあるかどうかを確認してください。etop次に、プロセスが原因である場合、最も多くのメモリを使用しているプロセスを提供するようにツールに依頼できます。これにより、多くの場合、問題を突き止めることができます。

問題が ETS またはバイナリである場合、内部のサブバイナリ ポインターが原因で、特定の大きなバイナリを長期間保持している可能性があります。これを修正するには、GC の微調整が必​​要です。

于 2012-12-05T15:53:53.183 に答える
0

おそらく、いくつかのproces_infoデータを使用できます:

{memory, Size}: サイズは、プロセスのバイト単位のサイズです。これには、コール スタック、ヒープ、および内部構造が含まれます。

process_info(self(), memory).   
{memory,17128}
于 2012-12-04T00:17:33.273 に答える