繁体   English   中英

如何使用触发器在JProfiler脱机模式下进行性能分析时自动获取保留的内存

[英]How to automatically get retained memory while profiling in JProfiler offline mode with triggers

我有一个大型的,内存密集型的,基于Java的Web应用程序,具有许多不同的功能,这将使我花费很长时间进行分析。 我认为不是使用不同的测试数据对整个应用程序中的每个功能进行手动配置,而是更省时的方法是在脱机模式下运行JProfiler并设置触发器来为我捕获数据。 测试团队将正常使用该软件,并且随着时间的推移,JProfiler将捕获内存敏感的热点,我们可以使用这些热点来提高我们的应用程序的效率。

但是,如果我将触发器设置为仅获取堆的快照,则它将仅给我提供浅内存 -每个类的内存统计信息,不包括其包含的任何引用对象。 但是,知道String或char []实例消耗了多少内存对我没有用。 我真正想知道的是我的类的保留内存 -每个实例的浅大小以及它包含的所有类的内存。 换句话说,对于我软件中的每个类,我想知道当所有实例都被垃圾回收时将释放多少内存。

所以基本上我有几个问题:

1)JProfiler是否可以仅通过触发快照而不记录内存来计算保留的内存? 看来您必须实际执行“记录内存”操作才能计算出保留的内存,但是我可能遗漏了一些东西。

2)如果必须记录内存以计算保留的内存信息,那么我的下一个想法是设置一个触发器,以在总内存达到某个阈值时记录信息。 但这又引发了两个问题:如何设置触发器以停止录制并拍摄快照? 并且由于我们已经超过了触发器中指定的阈值,记录会不会丢失最重要的内存信息?

上面的第2个数字使我相信,配置文件的最佳方法是在不进行任何记录和计算保留内存的情况下触发快照-仅限浅内存。 但是,如果浅层内存显示我的大部分内存使用情况都在char []中(确实如此),我如何从中得到有用的信息? 这如何帮助我追踪应用程序的内存密集区?

任何帮助是极大的赞赏

1)JProfiler是否可以仅通过触发快照而不记录内存来计算保留的内存? 看来您必须实际执行“记录内存”操作才能计算出保留的内存,但是我可能遗漏了一些东西。

实际上,您需要执行“触发堆转储”操作,然后堆walker将可用。 启用了“分配数据”的“开始记录”操作记录实时视图的数据(只有浅尺寸可用),但是它也为堆walker的“分配”视图提供数据,因此您可以分析对象的位置被分配。

并且由于我们已经超过了触发器中指定的阈值,记录会不会丢失最重要的内存信息?

触发触发器时,堆转储会捕获整个堆,因此您应该看到所有感兴趣的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM