繁体   English   中英

需要知道如何使用分析器/使用哪一个

[英]Need to know how to use profilers / which one to use

这似乎是一个愚蠢的问题,但是在对 stackoverflow 提出一些问题并查看其他人的问题之后,经常出现的一件事是使用分析器来查看代码的哪一部分运行缓慢等。

作为一名编程初学者,我对这一切都很陌生,但是由于我正在创建越来越大的项目,我觉得这样的工具有时会非常有用。 唯一的问题是,我不知道如何使用它们。

通常,我使用 JDeveloper 在 Java 中进行编码,并且我在互联网上看到有一个内置的。 我尝试使用它,但我想我真的不知道如何使用它,因为我找不到使我的程序变慢的部分。 我不知道是不是因为我不知道如何使用它,或者它以不好而闻名,所以我想我会在这里问我应该从哪个开始。

I have Eclipse installed as well and know how to use it (I use Eclipse when I'm coding some Python or when I'm trying tutorials for Android-development), so if there's a free profiler I could use for either of those two IDE,我真的很想知道它。 此外,我需要了解的有关分析器的教程或基本知识会对我有很大帮助。

在此先感谢并抱歉,我的问题实际上与编程无关,但这似乎是获取有关分析器的有价值信息的最佳场所。

如果您正在寻找免费工具, jvisulavm是一个很棒的工具。 它带有一个标准的 JDK 安装,它的可执行文件通常在 JAVA_HOME 的 bin 目录下,在 java、javac、javadoc 和它们的兄弟姐妹旁边。 这是一个教程:

http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/index.html

如果您正在寻找更高级的商业产品, YourKitjprofiler都很有趣。

如果您感到困惑, 那么大多数分析器供应商也会感到困惑。

首先要理解的是 - 程序并不慢,因为它们有慢的部分(瓶颈)。 他们很慢,因为他们做的比他们必须做的多。 他们有时间流失。

这就像一场赛马。 瓶颈是赛道上的一个狭窄地方,马匹必须在那里堆积并减速。 时间消耗就像另一条与第一条融合的轨道,马在其中徘徊并且必须行驶一段额外的距离。 然后可能会有另一条轨道与该轨道融合,然后是另一条轨道,依此类推。

可以避免的 function 调用是时间消耗的一个示例。

这就是我发现时间流失的方法。 它简单且与语言无关。 您甚至可以使用jStack之类的简单工具来完成。

Profiler 制造商的本意是好的,但他们受到一堆令人困惑的概念的阻碍。

比如“时间花在哪里”。 如果这意味着“最常找到程序计数器的位置”,那就像马在错误的赛道上一样。 您可以尝试缩短那条赛道,但真正的问题是马甚至不应该在那里。 即有一个应该避免的 function 调用。

如“测量的统计精度”。 您是否需要测量马绕过错误的赛道需要多长时间才能知道它在错误的赛道上? 不,您只需要拍摄快照(堆栈示例)。 它在错误的赛道上的时间越长,你就越有可能看到它。 如果你在那里看到它两次,你就会知道问题所在。

例如称其为“CPU Profiler”,这是忽略 I/O 时间的借口。 有时,时间消耗是您没有意识到的不必要的 I/O。 这就像马停下来咀嚼一袋燕麦。 如果您只能在马奔跑时拍摄快照,您将永远不会注意到 你只会注意到时间长得令人怀疑。

还有更多这些来自哪里......

使用分析器并非易事,需要大量有关 VM 内部的背景知识。 因此,最好先阅读有关 memory 管理、热点等方面的信息。可以在分析器帮助页面中找到一些不错的帮助,例如,请参阅JProfiler的帮助。

根据我的经验,当出现一些无法通过其他方式跟踪的严重性能问题时,我只需要使用探查器几次。 在许多情况下,简单的事情(例如日志中的时间戳)有助于解决性能问题。 所以使用分析器作为最后的手段。 话虽如此,我听说过人们会定期使用它的情况。 我虽然想过,但永远无法让这个过程为我工作。

我找不到任何能让我满意的免费分析器。 我在不同时间使用的商业产品是JProbeJProfiler 我更喜欢 JProfiler,但两者都可以让您获得结果。

通常,该过程首先在分析器中配置您的应用程序并告诉它您要专门研究哪些类。 当您在分析器中启动应用程序时,会以记录有关执行和 VM 的信息的方式对类进行检测。 因此,在运行您的应用程序之后,您可以对其进行分析,以查看哪些代码消耗最多,哪些对象使用 memory 最多。 您通常还可以监视线程、监视器和其他事物的数量。 要利用所有数据,您需要大量了解 VM 内部结构和正在分析的代码。

祝你好运!

暂无
暂无

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

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