2

正如我在另一篇文章中指出的那样,我遇到了一些 SPIN 构造函数花费过多时间来执行非常有限的数据的问题。我想我会采取不同的方法,看看我是否可以分析构造函数的执行情况,以深入了解他们在哪里花费了过多的时间。

如何分析 RDF4J 服务器下构造函数的执行情况?我正在通过 SPARQL update ( INSERT DATA) 查询进行实例化。这是 RDF4J 工作台上的系统信息:

RDF4J 工作台总结

我尝试使用 来分析运行 RDF4J 服务器的 Tomcat 服务器jvisualvm.exe,但我并没有获得太多见解。理想情况下,我想深入到 RDF4J 中的类/方法级别,以便我可以针对我的执行缓慢问题发布更详细的帮助请求,或者可能修复我的查询以提高自身效率。

下面是 Java Visual VM 的版本:

Java Visual VM 版本信息

RDF4J 在 Apache Tomcat 8.5.5 下运行:

在此处输入图像描述

我可以看到有关 Tomcat 的概述信息:

在此处输入图像描述

我还可以看到监视器选项卡和线程:

在此处输入图像描述

在此处输入图像描述

但是,我真正想看到的是分析器,这样我就可以看到我的慢查询在哪里花费了这么多时间。因为我没有为 Java 1.8 校准探查器,所以这挂在 Calibration 上。

在此处输入图像描述

这种尝试连接的盒子将无限期地持续下去。取消它会导致执行校准消息,该消息实际上没有做任何事情,并且是一个死胡同,需要杀死 Java VisualVM。

在此处输入图像描述

在杀死 Java Visual VM 并重新启动并查看 Options-->Profiling-->Calibration Data 后,我看到只有 Java 7 有校准数据。

在此处输入图像描述

我曾尝试将 Tomcat 切换到在 Java 7 上运行,并且确实有效:

在此处输入图像描述

探查器确实提出了 Tomcat:

在此处输入图像描述

但是,当我在 Tomcat 在 Java 7 上运行时尝试访问 RDF4J 工作台时,我无法让工作台运行:

在此处输入图像描述

所以,我还是卡住了。看起来 RDF4J 要求 Tomcat 在 Java 1.8 下运行,而不是 1.7。我无法在 Java 1.8 下进行分析。

我已经看到其他关于 Java VisualVM 问题的帖子,但一个适用的解决方案似乎是在开发环境(例如 Eclipse)中启动所有内容,并在目标代码在 Java 1.8 下运行时在调试器断点处动态调用分析器. 我没有准备好使用 Tomcat 和 RDF4J 来做到这一点,并且需要指针。我的目的不是成为 Tomcat 或 RDF4J 贡献者(因为我的任务不允许这样做......我不会因为时间得到报酬),而是要具体处理我的 SPIN 构造函数花费了这么长时间( s) 在 RDF4J 服务器类方面,然后向 gitub 上的 RDF4J 开发者社区寻求帮助。

可以绕过 Java VisualVM 校准吗?我可以在某处加载校准文件或目录供 Java VisualVM 使用,而不是尝试测量失败的校准数据吗?我只对类的相对 CPU 负载感兴趣,而不是绝对指标,我不需要与其他机器上的测量值进行比较。

谢谢。

4

0 回答 0