CentOS Linux リリース 7.3.1611
gcc バージョン 4.8.5 20150623
gperftool 2.4-8.el7
1. -ltcmalloc をリンクする私の C++ プログラムは、HEAPCHECKER または HEAPPROFILE なしで正常に動作します。使用メモリは5M~10Mで安定します。
2. env HEAPCHECKER=NORMALでヒープチェッカーを使用してプログラムを実行すると、メモリは OOM キラーまで 1 時間あたり約 50M 増加します。
3. env HEAPPROFILE="./hp" HEAP_PROFILE_ALLOCATION_INTERVAL=100000000でheap-profile を使用すると、メモリは 40 分ごとに約 100M 増加し、OOM もトリガーされます。ただし、pprof を使用してヒープ ファイルを分析すると、合計メモリは、100M を期待しているのに 0.1MB しかありません。
ヒープチェッカーとヒーププロファイルは、メモリ割り当てを追跡するために他の情報を記録する必要があるため、余分なメモリ使用を引き起こすことは知っていますが、それが私の場合の理由ではないと思います。
私はヒープチェッカーとヒーププロファイルを別の小さなプログラムで使用していますが、これは非常にうまく機能します。
これら 2 つのプログラムの最大の違いは、障害のあるプログラムがコルーチンを使用していることです。これは、関数 swapcontext、getcontext、および makecontext を意味します。
私の質問は次のとおりです。
Q1.HEAP_PROFILE_ALLOCATION_INTERVAL=100000000 に設定すると、pprof で開いたヒープ ファイルの合計メモリが 0.1M と表示されるのはなぜですか?
Q2.heap-checker や heap-profile がこれらのコルーチン機能とうまく連携しない可能性はありますか?