java - 如何测量 Spring Web 应用程序中的组件启动时间?
问题描述
如何正确测量按组件分组的 Spring Web 应用程序的启动时间?
理想情况下,我想同时获取系统信息(例如类加载时间,按包)和组件信息(bean/应用程序加载),以及显示每个 bean/组件/类/包的加载时间的时间线。
Chrome 时间轴是我正在寻找的一个很好的例子。
VisualVM/JConsole 分析器显示方法时间并且不分组任何东西,这使得它们不适合我的想法。
解决方案
目前,我能找到的最佳答案是使用 Brendan Gregg 的Java Flame Graphs帖子中的信息。这并不简单,但它是一个开始。
以下说明仅适用于 Linux:
-
git clone https://github.com/dcapwell/lightweight-java-profiler
构建它:
cd lightweight-java-profiler make cd ..
使用附加
-agentpath
开关启动应用程序,然后在完成分析后退出它:java -jar -agentpath:lightweight-java-profiler/build-64/liblagent.so /path/to/your-webapp.jar
traces.txt
在此之后,您应该在当前目录中找到一个名为的文件。下载 Brendan Gregg 的 FlameGraph 工具:
git clone http://github.com/brendangregg/FlameGraph
执行提供的脚本将跟踪文件转换为 SVG 文件:
cd FlameGraph ./stackcollapse-ljp.awk < ../traces.txt | ./flamegraph.pl > ../traces.svg
在 Firefox 中打开 SVG 文件;X 轴是样本数(100% 对应于总分析时间),方法调用堆叠在 Y 轴上:
推荐阅读
- tensorflow - 如何使用 tensorflow 图形优化图像空间?
- php - 验证码字符未显示大于 7.0.30 的 IIS 10 PHP 版本
- amazon-web-services - AWS SES - IP 地址是用于多个账户还是对我来说是唯一的?针对我未发送的电子邮件点击垃圾邮件陷阱
- python-3.x - 基于某个值的三个列表之间的模糊匹配
- flutter - 在此 Notes 应用程序中实现提供程序的最佳方法
- mongodb - Node、GraphQL + MongoDB:查询多对多关系
- java - 双击 jtable 中的 imageicon 会使 imageIcon 消失
- python - 如何在 Python 中将数字转换为列表?
- reactjs - 返回主页刷新/重新加载或手动输入 URL 反应
- python - 使用 tkinter 在多个位置放置一个标签