問題タブ [memory-leak-detector]
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++ - メモリリークを追い詰める方法valgrindは存在しないと言いますか?
ソケットからデータを受け取り、品質管理やその他のさまざまな条件付けを行ってから、名前付きパイプに書き出すプログラムがあります。その上でvalgrindを実行し、元々存在していたすべてのメモリリークを修正しました。次に、このプログラムの32個のインスタンスを実行し、それぞれに固有のデータが供給され、それぞれが独自のパイプに出力されるシステム上に「デモ」環境を作成しました。私たちはそれをテストしました、そしてすべてがうまく見えました。次に、データが送信される速度をばかげた速度に上げてストレステストを試みましたが、最初は問題がないように見えました...しかし、リソースがなくなるまで、プログラムはますます多くのメモリを消費し続けました。
私はvalgrindに目を向け、leak-check = fullを使用してvalgrind内で実行されている各プログラムを除いて、まったく同じセットアップを実行しました。いくつかの奇妙なことが起こりました。まず、メモリがリークしましたが、各プログラムが私のメモリの.9%を消費したところまでしかありませんでした(以前は、最大のメモリホッグが私のメモリの6%を完全に消費していました)。valgrindを実行すると、プログラムのCPUコストが急上昇し、現在は100%CPUで、負荷平均が非常に大きいため、使用可能なCPUが不足しているため、プログラムの実行速度が遅くなり、リークが発生するまでに時間がかかりすぎた可能性があります。 。これらのプログラムを停止しようとすると、valgrindは直接のメモリリークを示さず、潜在的なメモリリークを示しましたが、チェックしたところ、実際のメモリリークを表すものはないと思います。さらに、プログラムが100 MB以上を消費している間、メモリリークの可能性は数キロバイトとしてしか示されませんでした。valgrindによって報告された到達可能な(リークされていない)メモリもKBの範囲内であったため、valgrindは、私のプログラムがTopが使用していると言っているメモリの一部を消費していると考えているようです。
他のいくつかのテストを実行しましたが、奇妙な結果が得られました。1つのプログラムは、元のメモリリークが検出された速度の3倍で実行されていても、.9%を超えるメモリを消費することはなく、2つのプログラムはそれぞれ最大1.9%と1.3%のメモリをリークしますが、それ以上はありません。リークされたメモリの量とリークの速度は、プログラムのインスタンスが一度にいくつ実行されているかに何らかの形で依存します。これは意味がありません。各インスタンスは他のインスタンスから100%独立している必要があります。
また、valgrindで1つのインスタンスのみを実行して32のインスタンスを実行すると、valgrindedインスタンス(つまり、そうだと言えばそうです!)がメモリリークを起こしますが、valgrindの外部で実行されているインスタンスよりも低速です。valgrindインスタンスは、直接リークがないことを示し、Topが示すよりもはるかに少ないメモリ消費量を報告します。
何がこの結果を引き起こしているのか、そしてなぜvalgrindがメモリリークの認識を拒否するのかについて、私はかなり困惑しています。外部のライブラリかもしれないと思いましたが、実際には外部のライブラリは使用していません。基本的なC++関数/オブジェクトだけです。また、出力パイプに書き込まれたデータが高速でバッファが無期限に大きくなる可能性があると考えましたが、1)そのようなバッファが大きくなる上限があり、2)データをドロップするとメモリがリークした場合入力レートをゼロにすると、メモリは消費されたままになり、適度な量にゆっくりと戻ります。
誰かが私がここからどこを見るべきかについてのヒントを私に与えることができますか?なぜ記憶がこのように振る舞うのか、私は完全に困惑しています。
ありがとう。
c - 非常に遅いアプリケーションでメモリリークを見つける方法は?
私はCで書かれたプログラムを持っていて、それはBerkeley-Db、glib-2、およびlibxml-2を使用しています。これは、構文分析と意味分析を使用してNLPを作成し、単語ではなく検索インデックスに概念構造を格納する検索インデクサーです。
ただし、問題があります。1日ほど経つと、プログラムのメモリが不足します。
valgrindでプログラムを実行しようとすると、動作が非常に遅くなり、通常の実行よりも10倍遅くなるように見えます。
メモリリークをチェックするためのすべての試み(valgrindの下で数週間行われた)は、リークを示しませんでした。
この状況で私を助けることができるいくつかのツールを誰かが知っていますか?
c++ - USP10.DLL でのメモリ リーク
アプリケーション (PINVOKE を介して C++ dll を使用する .NET アプリ) の 1 つでデバッグ診断ツール v1.2 を実行したところ、次の警告が表示されました。
usp10.dll は、9.25 MB 相当の未処理の割り当てを担当しています。以下は、上位 2 つのメモリ消費関数です。 usp10!MapFullFile+14: 9.19 MB 相当の未処理の割り当て。usp10!AllocateCMAPtables+e6: 18.50 KB 相当の未処理の割り当て。
この USP10.DLL がどこから来たのかわかりません。Google によると、これはUnicode でエンコードされたテキストをレンダリングするサービスであるとのことです。この警告が表示される理由はありますか?
visual-c++ - 「static char THIS_FILE[] = __FILE__;」のポイントは何ですか?
のポイントはstatic char THIS_FILE[] = __FILE__;
何ですか?
はじめに:それは何をしますか?それはどこから来たのですか?
Microsoft の Windows 用ネイティブ クラス ライブラリである MFC には、DEBUG_NEW
メモリ割り当てとそれらが発生した場所 (ユーザー コード内) を追跡するマクロがあります。
これが機能するために、VS ウィザードは次のコード ブロックをすべての cpp ファイルに入れます: (ヘッダー ファイルではありません)。
そして、debug new マクロは次のように定義されます (in afx.h
):
機械全体で、次のような意味のある漏れ検出出力が得られます。
それで、もう一度質問は何ですか?
私が困惑しているのは、THIS_FILE
char 配列の目的です。機械は意味がありません。彼らが次のように定義した場合DEBUG_NEW
:
ifdef
すべてのファイルにそのブロックを含める代わりに、ヘッダーに配置するだけで完了できます。
それで、のポイントはTHIS_FILE
何ですか?
(ちなみに、これはまさに MS の CRT が行うことでmalloc
あり_malloc_dbg
、ヘッダーでデバッグ マクロが次のように定義されている場所crtdbg.h
です。
)
DEBUG_NEW
繰り返しますが、単純な方法が (より良い) 機能するのに、MFC マクロで複雑な方法が行われるのはなぜですか?
更新:ハ!私は最近、VS2005 ウィザードがの定義を生成された cpp ファイルに入れていないことに気付きました。THIS_FILE
それを調査すると、MS はしばらく前にafxtempl.h
、次のように定義されているように、もう必要ないと判断したようです。
それでも、なぜそれが必要だったのかという疑問は変わらないと思います。(そして、当時のメモリ要件の答えはかなり有効だと思います。)
activex - firebreath テスト ページの activex がシャットダウンされると、Leakdetector がリークを報告する
私は、leakdetector オプションを有効にして Firebreath をコンパイルしました。このシナリオでは、テスト ページをロードし、ページ上のリンクをクリックして、タブとブラウザーを閉じます。次に、leakdetector がすべてのリークを収集し、出力がhere になります。
このログから表も裏もわかりません。漏れは本当ですか?
performance - メモリ リークをチェックするための Perfmon カウンタ
サービスのメモリ リークの問題を確認したい。次の一連の perfmon カウンターを試しました。
- .NET CLR メモリ\# すべてのヒープのバイト数
- .NET CLR メモリ\Gen 2 ヒープ サイズ
- .NET CLR メモリ\# GC ハンドル
- .NET CLR メモリ\固定されたオブジェクトの数
- .NET CLR メモリ\# コミットされた総バイト数
- .NET CLR メモリ\# 合計予約済みバイト数
- .NET CLR メモリ\ラージ オブジェクト ヒープ サイズ
ここから上記のセットを参照しました
次のセットも参照:
- メモリ/使用可能なバイト
- メモリー/コミット済みバイト
- プロセス/プライベート バイト
- プロセス/ページ ファイル バイト
- プロセス/ハンドル数
ここから上記のセットを参照しました
パラメータ/基準、またはメモリ リークの perfmon カウンタを特定するためのその他の最良の方法はありますか?
メモリリークをチェックするためのカウンターのセットを提案できますか? または上記のセットはメモリリークをカバーしていますか?
python - pandasデータフレームを使用したメモリリーク
私はpandas.DataFrame
マルチスレッドコード(実際にはDataFrame
呼び出されたのカスタムサブクラスSound
)で使用しています。プログラムのメモリ使用量が徐々に10分を超えて増加し、最終的にコンピュータメモリの約100%に達してクラッシュするため、メモリリークが発生していることに気付きました。
objgraphを使用してこのリークを追跡しようとしましたが、インスタンスの数は常に増えてMyDataFrame
いるはずですが、そうではないことがわかりました。メソッド内のすべてのスレッドがrun
インスタンスを作成し、計算を行い、結果をファイルに保存します。終了します...したがって、参照は保持しないでください。
を使用objgraph
すると、メモリ内のすべてのデータフレームに同様の参照グラフがあることがわかりました。
それが正常かどうかはわかりません...これが私のオブジェクトをメモリに保持しているようです。アイデア、アドバイス、洞察はありますか?
c++ - 共有 DLL を使用する Windows 64 ビット アプリケーションに tcmalloc を統合できた人はいますか?
tcmalloc を統合しようとしている 64 ビットの Visual Studio 2010 (シングル スレッド) C++ Windows アプリケーションがあり、動的にリンクされた dll のいずれかを使用すると問題が発生します。tcmalloc をスタティック ライブラリとしてリンクしました。tcmalloc は、アプリケーションが共有 dll の 1 つを使用し始めるまではうまく機能します。ソリューションを 64 ビット DEBUG アプリケーションとして構築しました。CRT ライブラリの C/C++ デバッグ バージョン (MSVCP100D.dll および MVCR100D.dll) とのすべての dll のリンク。
以下は、失敗するコードの例です。すべてのメモリ割り当てに対して tcmalloc が呼び出されますが、delete が呼び出されると、アプリケーションがクラッシュします。メインの実行可能ファイルで関数を作成し、そこにコードをコピーすると、まったく同じコードが正常に機能するため、本当に不可解です。
このような状況で tcmalloc を使用した経験のある方がいらっしゃいましたら、フィードバックをいただければ幸いです。それは私には謎です。dllの(異なるヒープ??)のメモリモデルの問題ですか?知らない。彼らは同じヒープを使用しているようです。
この投稿が長すぎる場合は申し訳ありません。できるだけ多くの情報を提供しようとしました。
ありがとうございました。
ブルース
更新: テストとして、クラッシュしていた共有 dll を静的ライブラリに変更し、アプリケーションが別の dll を使用するまで、すべて正常に動作しました。そのため、何らかの理由で tcmalloc が共有 dll を処理するためにいくつかの追加手順が必要になります。tcmalloc を使用してメモリ プロファイリング用の dll の静的ライブラリをすべて作成できますが、共有 dll を tcmalloc で使用するには他に何をする必要があるかを知っておくとよいでしょう。
DLL ヘッダー ファイルのメソッド宣言: __declspec(dllexport) static std::string GetExecutablePath();
//.cpp の実装
一時文字列が破棄されたときに呼び出されるメソッド:
tcmalloc を共有 DLL として再構築した後、メモリを解放しようとすると別の場所でクラッシュするようになりました。
afxmem.cpp:
dbgheap.c:
c++ - コンソールでメモリリークを確認できません
Visual Studio 2010を使用していますが、メモリリーク用にVCが提供するCRTライブラリを使用してみました。しかし、コンソールでメモリリークのプリントアウトを確認できません。コードベース:
理由がわからない。