问题标签 [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.

0 投票
2 回答
2198 浏览

android - 使用 Eclipse 和 Mat 寻找内存泄漏,转换 hprof 文件时卡住了

这似乎是一个被问过很多次的问题。我正在使用 Eclipse 在 OS X 中编写一个 Android 应用程序。到目前为止,没有问题,除了应用程序有时会崩溃,我想看看发生了什么,以便我可以解决问题。(它可能与位图或变量没有正确回收有关。但我不知道从哪里开始研究它。)

我使用 DDMS 工具(在 eclipse 中)创建了一个转储文件。然后我下载了 MemoryAnalyzer 应用程序来打开它。这是我被困了一个小时的地方:我必须先转换文件,因为 Eclipse 以不同的格式写入 hprof 文件。我该如何转换它?

这个问题的答案,打开 HPROF 文件时出错,直接解决了我的问题。最佳答案与 hprof-conv 工具的参考相同。

您从 Android 获得的 hprof 文件具有 android 特定格式。您应该将 Android OS 中的 hprof >file take 转换为标准的 hprof 格式。为此,您可以使用位于 AndrodiSDK/tools/hprof-conv 的 hprof-conv 工具。

例如:

hprof-conv android.hprof mat.hprof

然后在 Memory Analyzer 中打开 mat.hprof。

我有几个问题。

  1. 当我打开 hprof-conv 工具时,它会显示一些关于它的行,然后显示“[进程完成]”。而且没有地方可以输入任何文字。屏幕上唯一相关的信息是:

    用法:hprof-conf infile outfile

  2. 我在终端中,所以我打开“新命令...”或尝试使用也打开的外壳。然后当我运行“hprof-conv dump1.hprof dump1a.hprof”时,我收到错误“找不到命令”。所以我觉得我跑题了。我还尝试了“hprof-conf”,而不是“hprof-conv”,它在第 1 点中建议的方式。同样的错误。还尝试了文件的各种路径,没有变化。

  3. 如果我在正确的轨道上,我如何正确地将这个命令指向文件位置?我在我的桌面上有它,它的名字是dump1.hprof。我对终端不是很有经验。

提前感谢您的回答,或者关于如何寻找内存泄漏的其他建议。

0 投票
1 回答
1655 浏览

android - 我的 android 应用程序内存使用量太大(由内存管理器报告)

我有一个动态壁纸应用程序,它使用从网上下载的照片用作壁纸。

内存管理器显示我的应用程序使用了 90MB 到 120MB(它是一个具有 1GB RAM 的设备)。那是很多。壁纸服务经常被杀死,有时系统甚至会恢复为默认的静态壁纸。

尽管我彻底检查了是否存在任何内存泄漏,并且 HPROF 转储分析表明我只有 2 个大对象在使用:当前用于墙纸的位图(16MB - 这是预期的 4Mpix 图像)和类 android.content.res.Resource( 12MB),HPROF 概览屏幕中报告的总大小为 32MB。

dumpsys meminfo 显示:

我读到:如何在 Android 中发现我的应用程序的内存使用情况?但这并不能帮助我得出任何结论...

我也用过:

它也没有多大帮助。

DDMS 显示 63MB 堆大小。

我的问题是?处理双倍屏幕尺寸图像的应用程序是否正常和预期?如果没有,剩下的 60-90MB 是什么?(我总共减去了 HPROF 给我的 30MB)。在我的应用程序中使用这么多内存可能会做错什么?什么应用程序实际做:

我有其他更复杂的模式,同时使用了更多照片,但以上内存使用量适用于最简单的场景。

这不是连续使用的问题 - 内存在第一次启动后描述:如果我终止服务,重新启动后它使用 90MB。在第一次打开选项屏幕后(带有几个选项的小活动/对话框可供选择 - 除了背景可绘制对象之外没有图形)内存使用量跃升至 124MB,并在屏幕关闭后返回到 112MB。第一次更换壁纸照片后,它会跳到 130+ 并返回到 120+。可能是因为堆大小在位图解码期间增加,然后保持这种状态。

我应该怎么办?如何减少(如果可能的话)我的应用程序内存占用?还有哪里可以看?我不指望现成的解决方案,但任何进一步的指导都可以帮助......

0 投票
1 回答
365 浏览

java - HPROF结果解读

我有两组 HProf 转储,一组用于大样本,另一组用于较小样本 - 两者都是我拥有的大量数据的非常小的样本的结果。我试图找出我方法中的瓶颈。

这是我的大( http://pastebin.com/PEH8yR3v)和小样本(http://pastebin.com/aR8ywkDH )的堆分配数据。

我注意到 char[] 是占用我大部分内存的那个。此外,char[] 占用的内存百分比从小样本运行到大样本运行不等。我不知道当我分析我的整个样本时它会如何变化。

但是,我关心的重要问题是 - 当我尝试运行一个 3GB 大小的输入数据(它写回 10GB 数据)时,使用这个程序(READ、PARSE/PROCESS、WRITE)。除了大小不超过 1GB 的列表外,我不会在内存中存储任何内容 - 这是普通的读取、处理、写入管道。鉴于此,我的程序在运行时仍需要大约 7GB 的主内存。

这是我的做法,

由于在 myFunction 中创建的对象将在 myFunction 结束时超出范围,因此我不会注意删除/释放它们。各位有没有感觉到瓶颈?

0 投票
1 回答
770 浏览

apache - 如何在 apache tomcat 中自动生成堆转储?

我在我的 Web 应用程序中释放资源时遇到问题,所以我需要知道如何配置我的 tomcat 7.0.41 以生成 .Hprof 何时会出现 PermGen 空间。

但是我还没有找到配置它的方法。

0 投票
1 回答
127 浏览

java - 为什么我转储的 hprof 文件显示总堆仅 9.6MB 而实际堆大小为 75MB

我从遇到 OutOfMemory 异常的用户那里得到了一个 hprof 文件。但是当使用 Eclipse Memory Analyzer 打开该文件时,它显示总内存只有 9.6MB,与实际堆大小 75MB 相差甚远。配置文件进程是否可能只转储部分堆空间?

0 投票
1 回答
1705 浏览

android - HPROF 之后我的应用程序中的巨大字节 []

有时,尤其是在我的应用程序中实现新功能时,我会使用 DDMS + HPROF 来分析内存和堆使用情况。由于该应用程序似乎没有任何性能-ANR 问题并且一切运行顺利,最初我并不关心它 - 但现在,我看到它的大小几乎总是相同,我想知道它到底能做什么是。

每次运行 HPROF 时,我都会检查泄漏嫌疑人选项卡。总会有一个android.graphics.Bitmap实例占用所有已用堆的大约 25%。

泄密嫌疑人

我想进一步了解那是什么,所以我打开了支配树,看到了这个:

支配树

所以基本上有一个巨大的byte[]实例保留了大量的堆,并且永远不会被释放。根据this,我复制了 that 的值byte[],将其转储到.data文件中,用 Gimp 打开,结果如下:

PNG

所以基本上,它看起来像 PNG 图像的“alpha(0)”部分。考虑到以下事实:

  • 我所有的图像文件的大小都小于 8K
  • 只有其中一些是PNG - 剩下的我能够转换为JPG,我做到了
  • 不管我是否添加更多图像,从应用程序开始(4 个月前)开始,图像的大小byte[]始终大致相同
  • 为了调试它,我尝试从and文件夹中删除任何图像文件并在没有任何可绘制资源的情况下运行应用程序,并且仍然存在drawabledrawable-xxxbyte[]
  • 我删除了几乎所有的布局,只保留了基本的功能和相同的结果
  • 支配树中,根类是android.graphics.Bitmap

任何人都知道这是什么byte[],如果我应该做些什么来释放它?

任何帮助表示赞赏!

0 投票
1 回答
543 浏览

java - 将 JVisualVM 快照中的“分配的对象”与 Java 堆转储中的实例数进行比较

我正在使用 JVisualVM 查看应用程序,并且在内存分析器和快照中看到了 SomeDomainClass 的许多对象。此后不久生成的 Java 堆转储(.hprof 文件)不包含 SomeDomainClass 的实例。因为内存分析器“显示分配的对象总数”,并且 hprof 文件包含堆中活动的对象,这是否表明应用程序正在创建 SomeDomainClass 的许多短期实例?

0 投票
5 回答
6777 浏览

java - jvisualvm:卡在“正在加载堆转储...”屏幕

我正在使用 jdk64,我的 java 版本是“1.6.0_24”。我的 tomcat 使用 -Xmx7196m 运行,而 jvisualvm 使用 -J-Xms2048m -J-Xmx3072m 运行。我对我的 tomcat java 进程进行了堆转储,我的.hprof文件大小约为 5.5 GB。当我尝试打开这个堆转储时,它只是停留在Loading Heap Dump...屏幕上。

我还查看了 VisualVM 在尝试打开堆转储时的堆消耗,但只有 500MB 左右。

注意:我确实看过jvisualvm: Stuck on “Loading Heap Dump” 屏幕问题,但它有所不同,并没有解决我的问题。

0 投票
0 回答
1314 浏览

java - 使用 hprof 分析 Hadoop Reduce 任务

我正在尝试使用

正如预期的那样,我生成了 4 个配置文件:

(文件_m_在mapper任务分析_r_期间生成,在reduce任务分析期间生成)

attempt_201402231438_11879_m_000001_0.profile看起来不错:

奇迹开始后:

  1. attempt_201402231438_11879_m_000000_0.profile仅包含标准标题(无配置文件信息)。我不太关心这个文件,因为我的主要兴趣是减速器,但这感觉不对
  2. attempt_201402231438_11879_r_000000_0.profileattempt_201402231438_11879_r_000001_0.profile包含线程和跟踪信息,但不包括CPU SAMPLESSITES信息。

作业成功完成。

知道会出什么问题吗?

为什么我没有得到减速器的CPU 样本?

有没有人遇到过同样的问题?

0 投票
1 回答
103 浏览

java - 使用oozie工作流时hadoop任务的hprof数据存储在哪里-测量内存使用情况

我已按照 hadoop 权威指南中的说明进行操作(此处也提到了如何检查 Hadoop 中映射任务的内存占用)。但是,任务完成后,我找不到任何数据可以查看。

在书中它说数据被移动到客户端运行的地方......我正在使用oozie工作流程,我想知道在我的情况下hprof数据移动到哪里?