问题标签 [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 投票
1 回答
532 浏览

java - 服务器端的配置文件应用程序

我有一个client哪个是Multithreaded代码,哪个是我的一个REST service正在部署到这台机器的代码-

http://px5qa01c-8539.host.com:8080/service/TEService/v1/get/USERID=100/PURCHASED

我可以远程访问上述机器,它是一台 Linux 主机。

现在我打算按我的意思做profiling,我需要看看哪些方法在我的 REST 服务上花费了多少时间。Server SideREST Service

在客户端,我正在运行这样的程序 - 这将影响我REST Service在上述机器上部署的程序。

java -Xrunhprof:cpu=samples,thread=y,depth=12,cutoff=0 -jar ServiceLnP.jar service_config.properties NUMBER_OF_THREADS:20 TOTAL_RUNNING_TIME:60

所以在客户端,它会生成java.hprof.txt文件,我可以用 HP Jmeter 打开并分析它。

问题陈述:-

但是在服务器端我该怎么办?分析已部署在其他机器上的应用程序的最佳方法是什么。

仅供参考 - 部署它的容器是 Geronimo。那么有什么办法,我也可以hprof在服务器上启用,一旦我在完成后点击我的 REST 服务,它就会生成java.hprof.txt我可以进一步分析的信息?

0 投票
2 回答
12949 浏览

java - 以编程方式从命令行分析 HPROF 内存转储文件

我正在调查使用 Eclipse 的内存分析器 (MAT) 分析 HPROF 文件。支配树、报告和 OQL 界面看起来非常有用。但所有这些都必须通过 MAT 软件手动完成。

是否有命令行界面,以便我可以以编程方式解析 HPROF 并自动生成自定义报告。

这对于集成这个测试基础设施来进行自动内存分析很有用。

顺便说一句,堆大小将在 10-60MB 之间。

0 投票
1 回答
748 浏览

android - 以编程方式解析内存快照 hprof 索引文件

我正在尝试以编程方式分析 hprof 文件。使用 android-sdk 中的 hprof-conv 工具,我生成了一堆 com.your.package.index 文件。

如何以编程方式解析这些 .index 文件?

我想在支配树上运行一些自定义分析,这很容易通过 MAT(Eclipse 的内存分析器)手动完成,但希望以自动化方式完成。

0 投票
1 回答
251 浏览

java - 如何在 Citrix 服务器上获取 hprof?

我需要为在 Citrix 上运行的 Java 应用程序捕获 hprof。

所以进程在服务器上,但用户界面在客户端机器上。我可以使用 VisualVM 附加到服务器上的 javaw.exe,但我无法捕获堆转储(给我一条错误消息),并且 VisualVM 中缺少“分析”选项卡。

任何人都知道我需要做什么才能从像这样通过 Citrix 虚拟化的进程中获取 hprof 吗?

0 投票
2 回答
3666 浏览

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

我使用以下命令使用 hprof 创建了一个堆转储文件:

这成功创建了大约 5MB 的文件“java.hprof.txt”。然后我打开 jvisualvm 来查看这个文件,并把它加载进去。但 visualvm 似乎卡在加载屏幕上。下面的屏幕已经启动了大约 10 分钟。

我错过了一步吗?我应该在 hprof 的命令行上使用不同的选项吗?如何读取此堆转储文件?

视觉虚拟机截图

0 投票
1 回答
128 浏览

java - 是否有与 C# Control IsDisposed 等效的 Java 组件?

我正在查看一些 hprof,试图找到内存泄漏。

我的代码保存了我正在构建的目标应用程序中对 Java 组件的引用。使用 Eclipse MAT,我可以看到其中一些组件仅由我的代码引用。我想确定目标应用程序已经完成了它们,即它打算让它们被垃圾收集。

在 C# 中有一个Control IsDisposed 属性,如果该属性为真,则基本上意味着应用程序已使用该控件完成。

在 Java 中是否有一个等价物,可以在 Eclipse MAT 或任何其他 hprof 分析器中看到,它会最终告诉您组件是否要被垃圾收集?

我更喜欢使用属性来识别组件是否已泄漏,因为使用此条件更容易查询堆,而不是“每个组件的路径到 GC 根的路径仅以我的代码结尾”

谢谢

0 投票
2 回答
586 浏览

java - 在对象中花费的时间。(hprof)

我正在分析我的一个应用程序——它是一个建立在 Java 之上的宏系统。我正在使用hprof来分析一些基本示例,以下是花费时间的前 20 个函数:

如您所见,大部分时间都花在了Object.<init>. 这对我来说有点模糊。

我的直觉是,时间是由内存分配占用的。使用 C 语言工作让我强烈地感觉到动态内存分配(即malloc())效率低下。然而,在 Java 中,福音似乎是 JVM 可以有效地处理短期对象。因此,从诸如对象池之类的模式中没有任何收获。

我应该补充一点,应用程序中最需要性能的部分是解析器,它确实创建了很多短期对象作为其操作的一部分。

你认为花费的时间Object.<init>是由于什么?它确实与内存分配有关吗?我可以从使用对象池或其他一些技巧来减少内存分配中受益吗?

编辑:

作为对 Mike Dunlavey 的回答的回应,这里是 JPerfAnal 对 hprof 输出的解释,给出了包容性的时间。

(JPerfAnal 还生成一个倒置树,其中子代是父代的调用者。为简洁起见,我没有复制它,但可以说大约 40% 的Object.<init>调用来自 和 的初始化。ArrayListParseDataParseErrors

现在,这并没有真正改变我对这个问题或我的问题的看法。我可以更改算法,使其实例化更少的对象;但目前,我正在寻找一个正交解决方案。那么:对象池可以帮助我吗?

0 投票
3 回答
8931 浏览

android - Android:在 Eclipse 中打开 .hprof 文件

我试图通过使用 Eclipse DDMS 视图中的 HPROF 文件来检查内存泄漏。

我尝试使用 MAT 读取保存到磁盘的 .hprof,但出现错误:

所以我在 StackOverflow 上的另一篇文章中遵循了一个解决方案,它告诉我更改首选项

Android > DDMS > HPROF 操作:在 Eclipse 中查看

但这只是将文件显示为不可读的文本文件: eclipse中的hprof文件

我假设它应该比这更容易理解所以我做错了什么?

编辑

我在其他帖子中读到了关于使用名为 hprov-conv.exe 的东西,我试图打开它,它闪烁了一个屏幕然后关闭(即使以管理员身份打开),所以我不知道如何使用它。

0 投票
1 回答
1453 浏览

android - 如何为使用 Proguard 构建/从 Google Play 安装的应用程序生成 HPROF 内存转储

如果我直接从 Eclipse 启动我的应用程序,我可以从 Eclipse DDMS 角度轻松地生成一个 HPROF 文件:

Eclipse 中的 HPROF 生成

但是,如果我创建一个发布版本(它使用 Proguard),我的进程未在 DDMS 中列出,所以我无法选择它。

任何人都可以列出从任意应用程序/进程生成 HPROF 的运行步骤列表吗?如果不可能,您能否解释启用它的选项(因为我控制了发布版本的生成)?

一个 adb 命令列表,或在 root 手机上运行的 shell 命令会很棒(例如,如果需要用于启动应用程序的自定义命令)。

0 投票
1 回答
326 浏览

java - 获取 Java 进程分配的总内存(没有分析器)?

是否有 JVM 选项可以打印出在运行期间分配的总内存,而无需通过检测分析器运行?

我当然不是 Java 中的内存分配器如何工作的专家,但可以肯定地跟踪分配的总字节数应该几乎没有开销。

我无法在分析器中运行,因为此应用程序需要在数小时内每秒处理数万条消息(高峰期更多);探查器的开销将使其不可行。

谢谢