繁体   English   中英

跟踪 java 程序执行

[英]trace java program execution

我很难找到一些程序来跟踪 java 程序的执行。

对于初学者来说,就像所有方法调用和每次调用所花费的时间一样,这会给我带来好处。

你有什么建议吗? 先感谢您

编辑:我想从启动时获得整个调用树或层次结构,无论它被确切称为什么,花费时间,而我无法使用 VisualVM 获得它。 我找到了一些据说可以做到的工具的屏幕截图,但我还没有完成它,我想要一些更简单的开始: 在此处输入图像描述

那将非常接近我的想法:它给出了一些方法调用树的踪迹,每个方法花费的时间,甚至是它的表示。

我试图解决的最初问题是什么? 这几乎是整个故事:首先,我正在开发一些必须填充一些知识库的工具。 我最近意识到它很慢(一些特定的请求,即向基础添加约 30 个实体需要 20 多秒),所以我想知道时间是否花在我的代码上,在网络上(REST调用以更新该知识库)、知识库本身或我的代码中。 如果我的代码很慢,我想知道它到底在做什么需要这么多时间。

另一个原因是我正在阅读“有效的 Java 第 3 版”,顺便说一句很棒的书。 在第 6 项“避免创建不必要的对象”中

有这个代码片段:

// Hideously slow! Can you spot the object creation?
private static long sum() {
  Long sum = 0L;
  for (long i = 0; i <= Integer.MAX_VALUE; i++)
    sum += i;
  return sum;
}

与那个相比:

private static long sum() {
  long sum = 0L;
  for (long i = 0; i <= Integer.MAX_VALUE; i++)
    sum += i;
  return sum;
}

我可以看到他的第二个版本会花费更少的时间,我明白为什么,没有实例化 Long object 等,但我想用实际措施看看它究竟需要多长时间来做实例化,用措施看看数字Long 的实例和正在创建的其他对象,memory Long 对象在这种情况下所占的百分比等。

还有一些其他的工作经验,我们会盲目地进行大量的重构,一些关于某些实现 X 是否比实现 Y“更有效”的激烈辩论,但实际上我们从来没有任何数据来支持它。

总而言之,我意识到我需要工具来获取有关代码正在做什么的实际和可靠数据,JVM 中发生了什么,memory 分配了多少,ZA8CFDE6331BD59EB2AC96F8911C4B66 花费了多少时间等等.

其中包含很多具体问题,我的第一个问题是:“我如何跟踪一个简单程序的执行情况”。

谢谢你,很抱歉一开始就没有特别具体。

建议的另一篇文章并没有太大帮助,在 Effective Java 的玩具示例中使用 VisualVM 和插件 Profile Startup,当我数到 Integer.MAX_VALUE 时,我可以得到一些东西,

在此处输入图像描述

但是如果我只数到 1.000.000 例如它看起来 VisualVM 没有时间开始(虽然我想用选项启动我的程序 -agentpath:/home/joseph/dev/visualvm_142/profiler/lib/ deploy/jdk16/linux-amd64/libprofilerinterface.so=/home/joseph/dev/visualvm_142/profiler/lib,5140 会让 VisualVM 启动,但我得到的只是一个空白屏幕,上面有“状态:分析不活动”,但都是一样的作为我计数到 Integer.MAX_VALUE 的执行,我只是不明白):

在此处输入图像描述

This little "Trace" tool developed by Oracle might help you: https://docs.oracle.com/javase/7/docs/technotes/guides/jpda/trace.html

它基于 Java 调试接口 (JDI)。

我真的很想使用它,但我花了 10 分钟寻找要下载的 Oracle 示例,但找不到它们。

过去我使用了很多 BTrace https://github.com/btraceio/btrace ,我看到它仍在积极维护中。

正确的术语是profiling 由于长长的(长?)评论列表,我将其作为答案。

您的商业 IntelliJ IDEA 和 NetBeans IDE 有一个分析器,您可以在其中启动配置文件、拍摄快照以进行比较、查找关键路径、memory 使用情况、持续时间、瓶颈。 您可能想比较它们,尽管 IntelliJ 可能会更好。

然后有像 SonarLint 这样的代码样式检查器,它可能会发现诸如使用包装类型进行计算之类的东西。

暂无
暂无

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

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