问题标签 [async-profiler]

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

linux - Oracle Linux 上的 Java 性能问题

我正在运行非常“简单”的测试。

可能不是很简单,因为使用随机,但同样的问题出现在使用 java 的任何其他测试上

在我的家庭桌面上

7个线程的性能:

带有 AsyncProfiler 结果的火焰图,在家中有 7 个线程 在此处输入图像描述

我在 Oracle Linux 上遇到问题

使用 1 个线程,我的性能非常出色:

火焰图与 AsyncProfiler 结果 1 线程 在此处输入图像描述 但 7 线程

带有 AsyncProfiler 结果的火焰图 7 线程

在此处输入图像描述

可能是 NUMA 的问题,因为有 2 个 Socket,并且系统仅配置了 1 个 NUMA 节点 numactl --hardware

但是在使用以下命令禁用一些 cpu 线程后:

性能提升不大,不大。

这只是非常“简单”的测试。在使用真实代码进行复杂测试时,它甚至是值得的,它花费了大量时间.annobin___pthread_cond_signal.start

我还在我的家庭桌面上部署了具有相同版本Oracle Linux和内核版本的 vagrant 映像,并使用 10 个 cpu 线程运行它,性能几乎与我的桌面上相同(~1M op/sec)。所以这不是关于操作系统或内核,而是一些配置

使用多个 jDK 版本和供应商(jdk 11 及更高版本)进行测试。使用 YUM 发行版中的OpenJDK 11 时性能非常低,但并不重要。

你能提出一些建议吗 提前谢谢

0 投票
0 回答
118 浏览

java - 为什么 ArrayBlockingQueue.poll() 期间 CPU 很高

曾经,我通过 Async-profiler(CPU 利用率)分析了 Java 应用程序。Adnrei Pangin(apangin) 感谢异步分析器!

这是堆栈(热方法)位于顶部:

这是位于 CPU 报告顶部的 Java 代码:xx.Service.class:

“队列”是 ArrayBlockingQueue,因为它使用不同的 Java 线程。

在我看来,函数__pthread_cond_timedwait根本不应该消耗 CPU,因为线程在没有自旋循环的情况下停车。但它做到了这一点。

这是正常情况还是我的代码queue.poll()不正确?

0 投票
1 回答
276 浏览

java - 尝试使用 Profiler 运行应用程序时 IntelliJ 中的 Windows Async Profiler 错误

在使用 Windows 异步探查器运行应用程序时,我"Profiler error: There is no dump file"在探查器选项卡中收到此错误。

环境 - IntelliJ IDEA Ultimate,Java 8

我是 Profiling 的新手,我才刚刚开始学习。Java Flight Recorder 工作正常,但 Windows Async Profiler 出现此错误。知道为什么会这样吗?

0 投票
0 回答
41 浏览

intellij-idea - 如何为 Intellij Async Profiler 启用基于时间的分析?

我想测量我的测试方法花费了多少时间;但是当我使用事件类型启用基于时间的分析时,因为wall我没有得到火焰图(或调用图)适当的时间消耗。

期望:所有的 waitX 方法都Flame Graph在选项卡中使用相对矩形宽度或 % 进行调用Call Tree

实际:仅wait50s在火焰图中显示,并且无论我使用的睡眠时间如何,它的宽度都保持不变。

代理选项:event=wall,interval=1ms,event=alloc

示例代码:

0 投票
1 回答
84 浏览

java - asyncprofiler malloc 未定义类别

我已经设置并使用了https://github.com/jvm-profiling-tools/async-profiler这非常有用,但是我有一个奇怪的事情我无法解释。

我的设置正是多个演示文稿显示它可以提供帮助的地方:

  • 具有节点池的 AKS kubernetes 集群

  • 部署在一个节点上的 Pod

  • 在容器中,我使用 debuginfo 设置了 openjdk-11

  • 分析设置是一个简单的 ./profiler start -e malloc PID

  • 由于我在虚拟化环境中进行分析工作,我得到的唯一警告是

我认为关于可能不需要的 malloc 调用捕获。

问题是,经过一些分析时间后,我已经捕获了火焰图显示的分配部分:堆栈跟踪“未知”(参见附图)。可能是我在容器中还没有完整的设置,或者我真的需要那些 sysctl?

问题是虚拟化将它们放置到位并不是一件容易的事,因为据我所知,这实际上会影响我们正在运行的底层节点。

分配的火焰图

更新

现在,在我的微服务的所有主要功能至少触发一次之后,我重新启动了分析,似乎没有未知的分配。愚蠢的问题,但是我是否会在所有类加载发生之前立即开始分析(因为 bean 是惰性实例化的),这就是为什么它被这样分类的原因?

更新 2

实际上我的假设是错误的我做了一个很好的转储 未知分类最少的 OK 转储

此后不久,同样的现象再次发生,据报道捕获的大量 malloc 事件是未知的,顶部显示没有显着增加。这可能是由于虚拟化而我实际上是从同一节点上的其他容器中捕获事件吗?在我的容器中没有更多的 java 进程,我还直接指定了 PID 在此处输入图像描述

更新 3

因此,在 Andrei 为我提供了“矮人 stackwalker”之后,这看起来好多了。我只有一个问题还不清楚,但只有我一个人。我们在这里用我的: ./profile.sh start --cstack dwarf -e malloc PID 分析 malloc 事件所以我在这些火焰图上看到的是:它只是捕获的事件编号,可以同时释放还是它当前持有所有这些 malloc 的本机内存?

My current situation is that I see payara-micro healthcheck and autodeploy holds significant amount of memory which is weird and my first guess for the leak source.

自动部署百分比 健康检查百分比

I also made a jeprof output anybody has a guess what "updatewindow/inflate" can point to? Jeprof 输出

0 投票
0 回答
49 浏览

java - Java Async Profiler 火焰图

在下面的场景中,Java async-profiler 是否是在比较 ArrayBlockingQueue 和 LinkedBlockingQueue 的性能时查看时间花费的正确工具?

在我的机器上,当消费者和生产者之间共享 50M 条目时,ABQ 的总执行时间总是比 LBQ 快 25%。两者的火焰图“几乎”相同,除了 LBQ 仅显示少数来自 JVM 对象分配代码的样本,但这并不能证明 25% 的增长是合理的。正如预期的那样,LBQ 中的 TLAB 分配要高得多。

我想知道,我怎样才能看到哪个活动(无论是代码还是硬件)正在花费时间?

亚军:

制片人:

消费者:

使用 ArrayBlockingQueue: 在此处输入图像描述

使用 LinkedListBlockedQueue:黑色箭头显示为分配捕获的样本 在此处输入图像描述