問題タブ [hprof]
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.
android - 私の Android アプリケーションのメモリ使用量が大きすぎます (メモリ マネージャによって報告されています)。
ウェブからダウンロードした写真を壁紙として使用するライブ壁紙アプリがあります。
メモリ マネージャーは、私のアプリが 90MB から 120MB を使用していることを示しています (これは 1GB の RAM を搭載したデバイスです)。それはたくさんあります。壁紙サービスは頻繁に強制終了され、システムがデフォルトの静的壁紙に戻ることさえあります。
メモリ リークを徹底的にチェックし、HPROF ダンプ分析では、現在使用されている大きなオブジェクトが 2 つしかないことが示されています。 12MB)、HPROF 概要画面で報告されている合計 32MB。
dumpsys meminfo はこれを示します:
私はこれを読みました: Android でアプリケーションのメモリ使用量を確認するにはどうすればよいですか? しかし、それは私が何かを結論付けるのに役立ちません...
私も使用しました:
それもあまり役に立ちません。
DDMS は 63MB のヒープ サイズを示します。
私の質問は?2 倍の画面サイズの画像を扱うアプリは正常であり、期待されるものですか? そうでない場合、残りの 60 ~ 90MB には何がありますか? (HPROF から合計 30MB を差し引いています)。アプリで大量のメモリを使用するために何が間違っている可能性がありますか? 実際に行うアプリ:
より多くの写真を同時に使用するより複雑な他のモードがありますが、上記のメモリ使用量は最も単純なシナリオ用です。
これは継続的な使用の問題ではありません。メモリは最初の起動後に説明されているとおりです。サービスを強制終了すると、再起動後に 90MB が使用されます。オプション画面を最初に開いた後 (いくつかのオプションを選択できる小さなアクティビティ/ダイアログ - バックグラウンドのドローアブル以外のグラフィックはありません)、メモリ使用量が 124MB に跳ね上がり、画面を閉じると 112MB に戻ります。壁紙の写真を最初に変更した後、130+ にジャンプし、120+ に戻ります。おそらく、ビットマップのデコード中にヒープサイズが増加し、その後はそのままになるためです。
私は何をすべきか?アプリのメモリ使用量を減らす方法 (可能な場合) はありますか? 他にどこを見る?すぐに解決できるとは思いませんが、さらに詳しいガイダンスがあれば役立ちます...
java - HPROF 結果の解釈
大きなサンプル用と小さなサンプル用の 2 セットの HProf ダンプがあります。どちらも、私が持っている膨大なデータの非常に小さなサンプルの結果です。私は自分のアプローチのボトルネックを理解しようとしています。
これは、大規模サンプル ( http://pastebin.com/PEH8yR3v ) と小規模サンプル ( http://pastebin.com/aR8ywkDH )のヒープ割り当てデータです。
char[] が私のメモリの大部分を占めるものであることに気付きました。また、char[] によるメモリ使用量の割合は、小さなサンプル実行から大きなサンプル実行までさまざまです。サンプル全体をプロファイリングすると、どのように変化するかわかりません。
しかし、私が懸念している重要な質問は、10GB のデータを書き戻す 3GB のサイズの入力データに対して実行しようとしたときに、このプログラム (READ、PARSE/PROCESS、WRITE) を使用することです。サイズが 1GB を超えないリストを除いて、メモリには何も格納しません。これは単純な読み取り、処理、書き込みパイプラインです。これを考えると、私のプログラムは実行中にまだ約 7GB のメイン メモリを消費します。
これが私のアプローチです。
myFunction 内で作成されたオブジェクトは myFunction の最後で範囲外になるため、それらを削除/解放することは気にしません。ボトルネックを感じていますか?
apache - Apache Tomcatで自動ヒープダンプを生成する方法は?
Web アプリケーションでリソースを解放するのに問題があるため、Tomcat 7.0.41 を構成して .Hprof をいつ PermGen スペースが発生するかを知る必要があります。
しかし、私はそれを構成する方法を見つけていません。
android - HPROF 後のアプリの巨大なバイト []
ときどき、特にアプリに新しい機能を実装するときは、DDMS + HPROF を使用してメモリとヒープの使用状況を分析します。アプリにはパフォーマンス - ANR の問題はないようで、すべてがスムーズに機能するため、最初は気にしませんでしたが、今ではほぼ常に同じサイズであることがわかり、何ができるのか疑問に思っています。なれ。
HPROF を実行するたびに、 [リークの疑い] タブをチェックします。android.graphics.Bitmap
使用されているすべてのヒープの約 25% を占めるインスタンスが常に存在します。
それが何であるかをもう少し知りたかったので、ドミネーターツリーを開いて、これを見ました:
したがって、本質的にbyte[]
、大量のヒープを保持し、決して解放されない巨大なインスタンスがあります。thisによると、 that の値をコピーしbyte[]
てファイルにダンプし.data
、Gimp で開いたところ、次の結果が得られました。
つまり、基本的には PNG 画像の「alpha(0)」の部分のように見えます。次の事実を考慮してください。
- すべての画像ファイルのサイズは 8K 未満です
- そのうちのいくつかは PNG ですが、残りは JPG に変換できました。
- さらに画像を追加しても問題ありませんが、そのサイズは
byte[]
アプリの開始時 (4 か月前) からほぼ同じです。 - それをデバッグするために、フォルダーとフォルダーから画像ファイルを削除し、描画可能なリソースなしでアプリを実行しようとしましたが、まだそこにありました
drawable
drawable-xxx
byte[]
- ほとんどすべてのレイアウトを削除し、基本的な機能だけを残しましたが、結果は同じでした
- ドミネーター ツリーでは、ルート クラスは
android.graphics.Bitmap
誰でもこれが何であるかを知っていbyte[]
ますか?それを解放するために何かをする必要がありますか?
どんな助けでも大歓迎です!
java - JVisualVM スナップショットの「割り当てられたオブジェクト」と Java ヒープ ダンプのインスタンス数の比較
JVisualVM を使用してアプリケーションを調べていたところ、メモリ プロファイラとスナップショットに SomeDomainClass のオブジェクトが多数表示されました。その直後に作成された Java ヒープ ダンプ (.hprof ファイル) には、SomeDomainClass のインスタンスが含まれていませんでした。メモリー・プロファイラーは「割り当てられたオブジェクトの総数を表示」し、hprof ファイルにはヒープ内でアクティブなオブジェクトが含まれているため、これはアプリケーションが SomeDomainClass の存続期間の短いインスタンスを多数作成していることを示唆していますか?
java - oozie ワークフローを使用する場合、hadoop タスクの hprof データはどこに保存されますか - メモリ使用量の測定
Hadoop決定版ガイドの指示に従いました(ここでも言及されていますHadoopでのマップタスクのメモリフットプリントを確認する方法)。しかし、タスクが終了した後、見るデータが見つかりません。
本では、クライアントが実行されている場所にデータが移動されると書かれています...私は oozie ワークフローを使用しています。私の場合、hprof データはどこに移動されるのでしょうか?