问题标签 [yourkit]

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 回答
45 浏览

string - yourkit 在内存分析期间不提供字符串对象

在尝试监控对象大小时,字符串对象不会显示在分析结果中。谁能告诉我 wat 是使它们显示在结果中的程序....

memory profile 保留大小 Shallow Size [Unreachable] 称为 40 40 [Unreachable] 称为 40 40

0 投票
3 回答
257 浏览

java - 当分析器无法收集样本时,如何调试无响应的服务器?

我编写的服务器偶尔会出现问题。它在 Clojure 中,但我认为这并不重要,我们可以假装它在 Java 中。无论如何,它一次可以正常工作几个小时,但会在表现非常糟糕的地方出现:所有活动停止,大约十五秒钟,然后它正常工作几秒钟,然后停止十五秒钟......所以(通常)大约十分钟左右,之后它会恢复正常行为。

我已经使用 YourKit 对其进行了很多分析,并排除了一些可能的嫌疑人:

  • 这不是垃圾收集问题:我正在使用 运行它-XX:+UseConcMarkSweepGC,并且我已验证服务器在次要和主要收集期间继续运行良好,这是由于此垃圾收集器的并发性质。而且我们不会因为总内存或其他东西用完而崩溃:当前的堆大小远低于其最大值。

  • 我不认为这是一个锁定/同步问题,但我对此不是 100% 确定的。YourKit 分析器有时会显示线程等待,例如争夺 System.out 的锁以生成日志消息,但唯一的长时间等待是线程池中的工作线程在无事可做时。当然,YourKit 说它从未检测到任何死锁。

  • 这不是由于附加了探查器而引起的,因为即使我启动服务器然后不理会它而没有附加探查器,它仍然会发生。

  • 占用所有 CPU 时间的不是系统上的其他进程:top显示我的 java 进程的 CPU 使用率为 100%,其他所有进程基本上为 0%。

我最大的问题是在这些奇怪的恐惧期间我看不到服务器在做什么,因为分析器停止接收样本。下面是 CPU 使用率图表:

YourKit CPU-graph 截图

图的左侧是正常操作,在此期间我们每秒左右获取分析器样本。右侧是“损坏的”,并且非常尖,因为分析器每十秒左右才获取样本。在它得到的样本中,服务器似乎在做它平常的事情:响应请求等等;并且日志确认它正在做正常的事情,但仅在分析器有样本时: 在图表上向上倾斜的“直线”期间,分析器没有样本,服务器什么也不做.

那么,这个图表对任何人来说都很熟悉吗?你以前有过这个问题并解决了吗?或者您能否指出一个工具的方向,该工具可以在 YourKit 无法确定我的服务器在做什么时?万一这很重要,服务器机器正在运行 Ubuntu 10.04,并且

0 投票
1 回答
971 浏览

java - 分析 Mule ESB 应用程序

Mulesoft提供的帮助安装 YourKit 并使用它来分析 Mule 应用程序的文档不是很有帮助。

我尽可能安装 YourKit 并将其集成到 MuleStudio 中。尝试设置配置文件配置时,它要求我提供 Java 应用程序(主类)的入口点。我不确定入口点是什么,因为我只需右键单击流程图并单击“运行方式-> Mule 应用程序”

有没有更好的手册来帮助弄清楚如何分析 Mule 应用程序?

0 投票
2 回答
339 浏览

profiler - 哪些因素会影响 cpu tracking 的速度?

当我使用 YJP 在我们自己的产品上做 cpu-tracing profile 时,它​​真的很慢。

该产品在 8GB 堆的 16 核机器上运行,我使用磨床运行一个小负载测试(例如 10 个磨床线程),在分析期间大约有 7~10 步。我有一个脚本来使用分析器启动产品,开始分析(使用控制器 api),然后启动磨床来模拟用户操作。当所有操作完成后,脚本会告诉分析器停止分析并保存快照。

在分析过程中,对于磨床测试中的每个步骤,完成时间超过 100 万毫秒。整个分析通常需要 10 多个小时,只需 10 个磨床螺纹,每个螺纹运行 10 次。如果没有分析器,它会在 500 毫秒内完成。

那么......除了要分析的产品的问题之外,还有什么会影响 cpu 跟踪过程本身的性能吗?

0 投票
1 回答
364 浏览

java - 更改 YourKit Remote Profiler 临时目录

是否可以更改 YourKit 远程分析器放入其 jar 的目录?

我们在尝试使用 YourKit 分析代理在 CloudFoundry(运行 Ubuntu 10.10)上启动 Tomcat 时遇到此错误消息:

Cannot start: failed to create jar file: /tmp/yjp201304241558.jar;

0 投票
0 回答
401 浏览

java - 使用 yourkit 分析 hadoop 作业

我正在关注本教程http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster

我想查看哪个方法或 java 进程使用所有 CPU 作为 wordCount 映射器,通过使用 yourkit 遍历语料库。据我了解,Hadoop 类型“文本”在 utf-8 中,Java 字符串在 utf-16 中。我试图看到 wordCount 映射器在从 utf-8 转换为 utf-16 方面所做的大部分工作。

但是,yourkit 没有显示有关此过程的太多详细信息。它只显示 CPU 时间如下: org.apache.hadoop.mapred.Child.main(String[]) ~ 96% 和 org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run() ~ 4%

我对你的工具包不是很熟悉。有人可以指出我应该如何处理这个问题吗?

0 投票
1 回答
558 浏览

java - How can I check how many instances of a class got created during recording of object allocation in YourKit?

I am new to YourKit profiler and after reading some good reviews wanted to give it a try . I am trying to profile a webapp running in weblogic application server. I basically want to check how many instances of a particular class got created between the time I start recording and the time when I stopped recording object allocation. How can I do that? I would also like to know the stacktrace for those object creation methods. For doing this do I also have to capture memory snapshot after starting allocation recording? If yes, then why?

0 投票
4 回答
1859 浏览

java - HashMap 放性能

我一直对一些 yourkit 快照感到困惑,这似乎表明在特定堆栈hashmap.put()中被证明是昂贵的。

假设这张地图的关键是一个非常复杂的对象,它没有被覆盖equals()hashCode()

在某些情况下真的有可能HashMap.hash()或代价高昂吗?Object.hashCode()

0 投票
1 回答
5396 浏览

java - WebappClassLoader 内存泄漏,即使没有 gc 根

这是头部转储(2013 年 10 月 29 日更新)

我正在使用以下 Web 应用程序:

  • 雄猫 7.0.24
  • 爪哇 6
  • Spring 3(使用 aop - cglib)
  • SLF4J 优于 Log4j
  • 甲骨文一致性

经过大量工作,我设法删除了对类加载器的所有强引用,现在它是垃圾收集器的候选对象。那么,内存泄漏解决了吗?当然不是!因为在几次热部署之后,由于 PermGen 空间而出现了 OOME。

多亏了 Yourkit,我能够检查到WebappClassLoaderPending Finalization,这意味着它正在终结器队列中等待(实际上,不是它WebappClassLoader本身,而是他的一个参照物)。检查内存快照,我发现了几个Finalizer对 Oracle Coherence 类的引用...... 在此处输入图像描述

这似乎是“好的”:由于删除所有强引用(杀死所有一致性线程、删除 java 安全提供程序等)所做的所有艰苦工作,Coherence 对象正在等待被垃圾收集。我认为这里没有什么可做的。

所以,我在考虑一些finalize破坏某些东西的执行,然后不允许清空终结器队列。但奇怪的是,使用 JMX 或jmap -finalizerinfo终结器队列似乎是空的!这一切都非常令人困惑,所以我一直在其他地方寻找......

你认为这是要做的事情吗?我读过一些关于CGLIB 增强finalize方法的内容。如果我有权访问,我可以按照此处Enhancer的说明创建一个回调过滤器,但我不知道如何使用 Spring AOP 来管理它。

好吧,在其他地方搜索,我从java.lang.reflect.Proxy. 这些是jdk动态代理对吗?或者它们与自省内存泄漏有关?有弱参考?

在此处输入图像描述

信息:我正在使用 Spring 的上下文侦听器来刷新 instrospector 的缓存 ( java.beans.Introspector.flushCaches())。我还能用这个做什么?

让我们继续。

然后,我们还有其他几个来自java.io.ObjectStreamClass$Caches. 我的很多业务对象都有这种弱引用。

在此处输入图像描述 在此处输入图像描述

也许我需要刷新这些缓存。但是怎么办??

然后我们有这些与 相关的弱引用com.sun.internal.ResourceManagerjava.util.logging.Logging并且java.lang.reflect.Proxy

在此处输入图像描述

我能用这个弱引用做什么?我需要担心这个还是问题出在终结器队列上?任何线索都会有所帮助......真的:-D

啊,另一件事,我从tomcat“主”线程中发现了一个弱引用,该线程永远不会被tomcat更新。我知道我的应用程序可以在某些 tomcat 线程中留下一些线程本地变量,但是tomcat 7 更新这些线程以避免类加载器内存泄漏在此处输入图像描述

我认为这是我的记忆快照中最奇怪的事情,但是一个弱参考对吗?我能用这个做什么?

编辑:阅读java.lang.refjavadoc我发现了这个:

一个对象是弱可达的,如果它既不是强可达也不是软可达,但可以通过遍历弱引用来达到。当对弱可达对象的弱引用被清除时,该对象就有资格进行终结。

那么,弱引用在实现方法的时候,是否可以将对象保留在堆中呢?finalize

同时我找到了一个答案,我设法删除了对我的类加载器的所有弱引用,但有两个:ClassLoaderLogManager.classLoaderLoggers一个与 tomcat 线程相关。

注意:实际上,我设法删除了第一个,但是在取消部署之后/期间,tomcat 再次设置了此引用。

编辑:铅锤结果

我已经尝试过 plumbr 并且在 Web 控制台上没有报告。标准输出上只有这条消息

0 投票
4 回答
1047 浏览

java - 为什么 JDBC ResultSet 没有被垃圾收集

我试图通过关闭它并在 finally 块中将值设置为 null来释放JDBC ResultSet使用的空间。前任:

当我检查YourKit中打开的 ResultSet 的数量时,即使所有结果集都已关闭并设置为 null,而不是显示 0 结果集 open YourKit 显示打开结果集的一些非零值。任何人都可以在这里帮助我使打开结果集的数量为 0。

提前致谢。坦马伊