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