次のパターンのアプリケーションがあります。
- アイドル時間の後に休止状態になる 2 つの実行時間の長いプロセスと、メモリ消費量が予想どおりに減少する
- N (0 < N < 100) 個のワーカー プロセスが何らかの作業を行い、アイドル状態が 10 秒以上続くと休止状態になり、アイドル状態が 2 時間以上続くと終了する
- 夜間、アクティビティがない場合、プロセス メモリはアプリケーションの開始時とほぼ同じ値に戻ります。これは、すべてのワーカーが停止しているためと予想されます。
問題は、「システム」セクションが増え続けることです (約 1GB/週)。
私の質問は、そこに保存されているもの、またはその領域にメモリを割り当てて解放していない人をデバッグするにはどうすればよいかということです。
私はすでにlists:keysearch/3をテストしましたが、それは私が使用している唯一のネイティブのものであるため、メモリリークはないようです(ポートなし、ドライバーなし、NIFなし、BIFなし、何もありません)。Erlang のバージョンは R15B03 です。
現在のerlang:memory()の出力は次のとおりです (トラフィックはわずかで、アプリは 2 月 3 日に開始されました)。
[{total,378865650},
{processes,100727351},
{processes_used,100489511},
{system,278138299},
{atom,1123505},
{atom_used,1106100},
{binary,4493504},
{code,7960564},
{ets,489944},
{maximum,402598426}]
これは 64 ビット システムです。ご覧のとおり、「システム」セクションは約 270MB で、「プロセス」セクションは約 100MB です (夜間は約 16MB まで低下します)。