jprofiler简述
背景
基于jprofiler12.0.4
性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益.Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注.可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等.想要定位这些问题,一款优秀的性能诊断工具必不可少.本文将介绍 Java 性能诊断过程中的常用工具,并重点介绍其中的优秀代表 JProfiler 的基本原理和最佳实践
其它工具
命令行工具
JDK 内置了许多命令行工具,它们可用来获取目标 JVM 不同方面、不同层次的信息.
- jinfo - 用于实时查看和调整目标 JVM 的各项参数.
- jstack - 用于获取目标 Java 进程内的线程堆栈信息,可用来检测死锁、定位死循环等.
- jmap - 用于获取目标 Java 进程的内存相关信息,包括 Java 堆各区域的使用情况、堆中对象的统计信息、类加载信息等.
- jstat - 一款轻量级多功能监控工具,可用于获取目标 Java 进程的类加载、JIT 编译、垃圾收集、内存使用等信息.
- jcmd - 相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间等信息.
阿里开源的arthas
,是一款综合诊断的工具
图形化工具
eclise
的MAT
是专门的内存分析工具,主要用于查找内存是否泄露
JVisualvm 是 JDK 内置的可视化性能诊断工具,它通过 JMX、jstatd、Attach API 等方式获取目标 JVM 的分析数据,包括 CPU 使用率、内存使用量、线程堆栈信息等.此外,它还能直观地展示 Java 堆中各对象的数量和大小、各 Java 方法的调用次数和执行时间等.
分布式监控工具
如skywalking
之类的工具,微服务,云原生,监控分布式应用
jprofiler简述
JProfiler
是由 ej-technologies 公司开发的一款 Java 应用性能诊断工具
- 方法调用 - 对方法调用的分析可以帮助您了解应用程序正在做什么,并找到提高其性能的方法。
- 内存分配 - 通过分析堆上对象、引用链和垃圾收集能帮您修复内存泄漏问题,优化内存使用。
- 线程和锁 - JProfiler 提供多种针对线程和锁的分析视图助您发现多线程问题。
- 高级子系统 - 许多性能问题都发生在更高的语义级别上。例如,对于JDBC调用,找出执行最慢的 SQL 语句。JProfiler 支持对这些子系统进行集成分析。
jprofiler简介
核心组件
JProfiler 包含用于采集目标 JVM 分析数据的 JProfiler agent、用于可视化分析数据的 JProfiler UI、提供各种功能的命令行工具,它们之间的关系如下图所示。
JProfiler agent
JProfiler agent 是一个本地库,它可以在 JVM 启动时通过参数-agentpath:
JProfiler UI
JProfiler UI 是一个可独立部署的组件,它通过 socket 和 agent 建立连接。这意味着不论目标 JVM 运行在本地还是远端,JProfiler UI 和 agent 间的通信机制都是一样的。
命令行工具
JProfiler 提供了一系列命令行工具以实现不同的功能。
- jpcontroller - 用于控制 agent 的采集行为。它通过 agent 注册的 JProfiler MBean 向 agent 传递命令。
- jpenable - 用于将 agent 加载到一个正在运行的 JVM 上。
- jpdump - 用于获取正在运行的 JVM 的堆快照。
- jpexport & jpcompare - 用于从保存的快照中提取数据并创建 HTML 报告。
安装配置
- 本地连接
- 远程连接(ssh tunnel/socks proxy)所以,也可以调试线上的机器