問題タブ [tcmalloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - tcmalloc とリンクしようとすると LNK2005 エラーが発生する
Visual Studio 2013 で tcmalloc を使用してプロジェクトをコンパイルしようとしました。gperftools
パッケージから libtcmalloc の .lib ファイルをコンパイルし、libtcmalloc.lib をリンカー入力オプションに追加しました。
プロジェクトをビルドしようとすると、次のエラーが発生します。
リンカー オプションから libtcmalloc.lib を削除すると、プロジェクトは正常にコンパイルされます。
mongodb - MongoDB 致命的なエラー: 内部 tcmalloc データを割り当てようとしているときにメモリが不足しています
ubuntu 14.04サーバー64ビットでmongodb 3.2を実行しています。mongodb サーバーがクラッシュし続けます。サーバーを再起動するたびに、次のように表示されます。
また、この後にmongoシェルを実行すると、次のエラーが表示されます。
私のシステムでは以前は発生していませんでした。このエラーを修正するにはどうすればよいですか? 2~3時間おきに発生し続けます。
完全な MongoDB ログ ファイル:ダウンロードはこちら
EDIT1: mongodb ログ ファイルを追加しました。
c++ - dwPageSize と dwAllocationGranularity の関係
Google の TCMalloc ソース コード (Windows への移植) を読んでいます。
上記のコード スニペットでわかるようにpagesize
(つまり、割り当ての単位) は、dwPageSize と dwAllocationGranularity の間の最大値として計算されます。私が知りたいのは、これら 2 つの値の間の関係の種類です。ここで説明されている方法で値を計算する必要がありますか? また、dwPageSize が dwAllocationGranularity より大きくなる状況はありますか?
c++ - tcmalloc は、純粋なスタック割り当てのパフォーマンスにどの程度近づいていますか?
私は、tcmalloc がスレッドごとの空きリストを維持し、そこから動的割り当てが満たされる場合、平均的なケースでの tcmalloc のパフォーマンスはスタック割り当てに非常に近いはずだと推論していました (プールのサイズ変更のコストは、多くのリソースで償却されます)。オペレーション)。
これは実際の実践に当てはまりますか?私が考えていない退化したケースはありますか?
c++ - tcmalloc heap-checker または heap-profile を実行するときに C++ プログラムが大量のメモリを使用する理由
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 がこれらのコルーチン機能とうまく連携しない可能性はありますか?