問題タブ [memory-profiling]

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.

0 投票する
1 に答える
232 参照

.net - WCFでTimeBoundedCache.ExpirableItemのインスタンスリークを引き起こす可能性のあるリークはどのようなものですか?

.NET メモリ プロファイラーを使用して WCF アプリケーションのプロファイルを作成したところ、TimeBoundedCache.ExpirableItem および Byte[] 型のインスタンス リークがあることがわかりました。

ここに画像の説明を入力

比較は 1 時間間隔の 2 つのスナップショットを使用して行われ、異なる時間での比較でも、2 つのタイプの数が一貫して増加していることがわかります。この2種類以外は目立った漏れはありません。

割り当てスタックは次のようになります。 ここに画像の説明を入力

誰かがこれを引き起こしている可能性があることを認識していますか?

0 投票する
1 に答える
398 参照

haskell - memory profiling changes memory usage (for the better)

This is actually a follow up question of this question. I managed to get the profiling to work and the problem really seems to be lazy evaluation.

The data structure I'm using is a Map Int (Map Int Text), where Text is from Data.Text. The problem is, that the function which builds this map creates a huge thunk. Working on an input text of about 3 MB the programs needs more than 250 MB of memory.

Now to the real purpose of this question:

To get the amount of characters in this data structure is use the following function:

Not beautiful, but it gets the job done. I'm using this function in the main function right after the TextResource is created. The interesting thing is, that when I profile the program by using the RTS option -hr or -hc the memory usage goes down to 70 or 50 MB after a while, which would be totally fine.

Unfortunately this only works when using the profiling options and the totalSize function - without them it's back to 250 MB.

I uploaded the program (< 70 lines) together with a test file and a cabal file, so that you can try it yourself: Link

The test.xml is a generated XML file, which should be put into the executables directory. To build, cabal configure --enable-executable-profiling and afterwards cabal build should be enough (if you have the profiling versions of the required libraries installed).

You can see the change when running the program once with +RTS -hc and once without.

I'd be really great if someone could run the program, since I'm really stuck here. I already tried to put in deepseq at several places, but nothing works (well, besides using the profiling options).

Edit:

Profiling does show, however, that only ~20MB of the heap is used, so as in my comment, I blame GHC for not freeing as much of the GC nursery memory as you seem to want.

Thanks, that pointed me into the correct direction. As it turns out, you can tell GHC to perform a garbage collection (performGC), which works perfectly well, after deepseqing the map. Even though I guess the usage of performGC is not recommended, it seems to be the right tool for the job here.

Edit2: This is how I changed the main function (+ deepseqing the return of buildTextFile):

0 投票する
3 に答える
489 参照

c++ - クラス内のメモリ使用量 - double を float に変換してもメモリ使用量が期待どおりに減少しませんでした

次のタイプの何百万ものクラスを初期化しています

floatテンプレートの目的は、ユーザーが精度を選択できるようにすることです。これは、使用するメモリ (RAM) が少なくなるdoubleという考えによるものです。node<float>

doubleただし、 からに切り替えてfloatも、プログラムのメモリ フットプリントが期待どおりに減少しません。質問が 2 つあります。

  1. コンパイラ/オペレーティング システムが、float に必要なスペースよりも多くのスペースを予約している可能性はありますか (または double として格納することさえあります)。もしそうなら、どうすればこれを止めることができますか - 私はg ++を搭載した64ビットマシンでLinuxを使用しています。

  2. すべての異なるクラスで使用されているメモリの量を判断できるツールはありますか? (つまり、ある種のメモリプロファイリング)-メモリが、私が考えていなかった他の場所でグブリングされていないことを確認するため。

0 投票する
1 に答える
485 参照

objective-c - メモリのピークを追跡するにはどうすればよいですか? (これは l ではなく ap でピークに達します。)

私はキオスクアプリを持っています。これは基本的に、さまざまな情報を含む一連のスライドを表示します。私がこれをコーディングし始めたのは、Objective-C と iOS の開発を始めた 1 年以上前のことです。私のコード スタイルは、以前よりもはるかにクリーンになりました。経験も豊富になったので、ゼロから書き直すことにしました。

Allocations インストルメントを使用してアプリを実行し、メモリ使用量を確認しました。これがキオスクアプリであることを考えると、すべてがリークなしでスムーズに実行される必要があります. (もちろん、すべてのアプリはリークなしで実行する必要がありますが、キオスク アプリではこれがさらに重要な目標になります。) 興味深い結果が得られたので、古いバージョンのコードも実行しました。

古いバージョンのコードを実行すると、約 1.15 メガバイトのメモリ使用量でほぼ均一に実行されます。すべてが必要に応じて割り当てられ、割り当て解除されているようです。しかし、私の新しい実装では、少し違うものを見ています。メモリ使用量は、小さな「プラトー」で急増し続け、最終的には約 1.47 メガバイトの使用量でピークに達するようです。10 時間以上実行した後の新しい割り当てレポートは次のようになります。

ここに画像の説明を入力

私はいくつかの理由で心配しています。

  1. 走り始めの変なパターン。
  2. 割り当ては 1.47 メガバイトでピークに達しているように見えますが、一晩実行すると、時間の経過とともにメモリの使用量が徐々に増えていくことがわかります。それは良いことではありません。

古いプロジェクトと新しいプロジェクトの間には、いくつかの顕著な違いがあります。

  • 古いものはバッキング ストアとして Plists を使用します (手動で plist ファイルを読み書きします)。新しいプロジェクトは Core Data を使用します。

  • 新しいプロジェクトは、古いプロジェクトにはなかった各「スライド」で呼び出されるライブラリを実装します。このライブラリについては、私が作成し、すべてをリリースしていることを確認し、手動リリースが不可能な場合にのみ自動リリースされていることを確認したことを除いて、このライブラリについてもっと心配しています。

  • どちらのクラスもファクトリ クラスを使用してスライドを作成します。古いプロジェクトでは、ファクトリ クラスはシングルトンでした。シングルトンがリリースされたことがないため、通常のクラスにすることでメモリの問題が解決されると思いました。(したがって、その プロパティは解放されていませんでした。新しいプロジェクトでは、ファクトリ クラスが解放されているため、なぜまだすべてのメモリを占有しているのかわかりません (それが問題の原因である場合.

  • 古いプロジェクトでは、さまざまな場所で文字列定数を使用しています。新しいコードは、同じことに対して大規模な列挙型を使用します。(一般に、新しいコードはより多くの定数を使用します。)

メモリのピークを追跡するにはどうすればよいですか? メモリは、使用しているものを破棄するときにアプリケーションによってすべてクリーンアップされますが、アプリが終了するまでは破棄されないようです。

誰かが私を正しい方向に向けるのを手伝ってくれたら幸いです。

編集:

ピーキングは、 KosherCocoaライブラリへの呼び出しによって引き起こされているようです誰かがそれを見て、メモリ管理に関する限り、私が間違っていることを教えてくれれば、本当に感謝しています。

0 投票する
2 に答える
1621 参照

java - Java でこの NetBeans メモリ プロファイル セッションを理解する方法 (目に見えるメモリ リーク)?

私は Java の初心者であり、NetBeans でこのメモリ プロファイル セッションを分析する方法と、それを監視してメモリ リークの検索を支援する方法を知りたいと考えています。

「ライブバイト」とは?すべてのライブ バイトを合計すると、Java アプリケーション システム メモリによって使用されるごく一部しか得られないことがわかります。各オブジェクト タイプの割り当てられたバイト数に関する情報がないのはなぜですか? 「割り当てられたオブジェクト」の値が増え続けているのは、メモリ リークの兆候ですか?

これは、多数の同時スレッドと http 接続を使用するアプリケーションです。スレッドを確認しましたが、問題なく動作しています。つまり、同時に 20 を超えるスレッドはありません。http 接続には JBOSS Netty を使用し、HTML の解析には jSoup を使用しました。

netbeans プロファイラー

このメモリ リークは、割り当てられた ParseError オブジェクトが多すぎることが原因ですか? または、バイト作成スタック トレースでメモリ リークの理由を検索する必要がありますか?

その他のリソース:

netbeans プロファイラー

netbeans プロファイラー

編集:

プロジェクトに HTML Cleaner を追加しました。これにより、パーサー エラーが表示されなくなりました。メモリ リークの増加が約 3 ~ 4 倍遅くなりました。メモリ使用量が 800MB に達した後、アプリケーションがクラッシュし、NetBeans でヒープを監視できました。結果:

ヒープ

注: アプリで LinkedHashMap を作成していないため、他のライブラリで作成する必要があります。TagNode は、「HTML Cleaner」によるクリーニング後にクリーニングされた html を保持するオブジェクトです。私のアプリには TagNode オブジェクトが 1 つしかなく、これは netty http 応答ハンドラー (messageReceived によって呼び出される) のローカル変数です。

0 投票する
2 に答える
1102 参照

windows-phone-7 - メモリプロファイリングツールとメソッド

WindowsPhone7アプリのメモリ使用量を分析しようとしています。プロパティをクエリするApplicationPeakMemoryUsageと、ソークテストの後に約90Mbの値が得られます。System.GC.GetTotalMemory(true)この時点で〜11Mbを返すため、バランスはアンマネージメモリである必要があります。アプリはアンマネージメモリを明示的に割り当てないため、バランスはGPUアセット、オーディオ、アプリのバイナリ自体であると想定しています。

呼び出しContentManager.Load()とGPUリソ​​ース割り当て(new RenderTarget2D()など)を囲むことによって。に似たコードで

レンダリングバッファ、テクスチャ/オーディオリソースなどで使用されるメモリのおおよその数値を取得できます。これらの合計は、アプリ全体で約45〜50Mbです。ApplicationCurrentMemoryUsage初期化の開始直後に10Mbをわずかに下回る収量。11Mbのマネージヒープも差し引くと(これは部分的に二重にカウントされます!)、これにより約20Mbが考慮されなくなります。

Mangoメモリプロファイラーは合計を追跡しますが、管理対象ヒープの割り当てを分類するだけです。GPUリソ​​ース、オーディオ、アプリバイナリ自体以外に、大量のアンマネージメモリを使用している可能性があるのは他にありますか?私がしていることよりも、記憶を追跡するための賢明なツールや方法はありますか?

0 投票する
1 に答える
243 参照

winforms - Winform アプリケーションでメモリ リークが発生する一般的な問題は何ですか?

Ants Memory Profiler を理解しようとしています。私が抱えている問題は、メモリリークのある簡単なアプリケーションがないことです。

Redgate (QueryBee) のサンプルを使用しましたが、私の好みに合わせたものでした。そのための簡単なアプリが必要です。

作成しようとしましたが、うまくいきません。それは機能していません。メモリリークはありません。呼び出されたフォームを破棄せずに ShowDialog を呼び出すと、メモリリークが発生することについて読みましたが、ここではそうではありません。

VS2010 と .NET 4.0 を使用しています

私は非常に一般的な問題に特に興味があります。

これが私がこれまでに持っているものです。メモリリークを取得できますか?:

メインフォーム

サブフォーム

0 投票する
3 に答える
11262 参照

python - Python3 用のワーキング メモリ プロファイラはありますか

Python 2 にはいくつかのツールがありますが、すべてが古くて時代遅れのようです。

PySizer と Heapy を見つけましたが、すべて Python2 指向のようで、移植には多くの労力が必要です。

objgraph は興味深いですが、まだ完全に機能するプロファイラーではありません

どのツールを使用していますか?

0 投票する
1 に答える
485 参照

.net - このDataGridViewがまだUserPreferenceChangedEventHandlerによって参照されているのはなぜですか?

VS2005を使用した.NET2.0Winformアプリケーションビルドを.NET3.5SP1にアップグレードしました。VS2008によるビルド

UserPreferenceChangedEventHandlerによって参照されたToolStripControlが原因で、アプリケーションの.NET2.0でメモリリークが発生しました。

.NET 3.5にアップグレードすると、問題が修正されました。DataGridViewsにまだ問題があります。

これらは、UserPreferenceChangedEventHandlerによっても参照されます。

DataGridViewsに共通の問題があり、それらを含むフォームがガベージコレクターによってリサイクルされないようになっていますか?

インスタンス保持グラフ

0 投票する
4 に答える
1765 参照

.net - テストプロジェクトでメモリプロファイラーを実行するにはどうすればよいですか?

全て、

OOM例外をスローするテストプロジェクトに問題があります。問題は私たちにあると思います。どういうわけか参照を保持していて、メモリが解放されることはありません。

そこで、メモリプロファイラーを実行して、これがどこで発生しているかを確認したいと思います。

プロファイラーツールのセットアップは、ツールをnunit-console.exeにポイントし、テストプロジェクトを実行して、いくつかのスナップショットを作成するだけです。

残念ながら、これは機能しません。私はSciTechとデモANTSの両方を試しましたが、どちらもNUnitコンソールアセンブリ/appdomain/何でも成長していないことを喜んで報告しています。素晴らしい。タスクマネージャーのプロセスは着実に450MBに成長しましたが、メモリプロファイラーはそれがまったく成長していないと報告しています。

素晴らしい。

私はグーグルで検索し、単体テストプロジェクトを処理する方法についていくつかの(ツール固有の)単純な手順を見てきました。私はそれらのことを試しましたが、うまくいきませんでした。NUnitのappdomain/assembly設定を試してみましたが、これまでのところ役に立ちません。

それで。

誰かが実際にテストプロジェクト(あらゆる種類の-NUnitを使用していますが、.NET自動テストフレームワークでも同じだと思います)に対してメモリプロファイラーを正常に実行しましたか?.NETテストフレームワークの場合は?もしそうなら、どの指示があなたのために働きましたか?