加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Java 性能瓶颈分析工具 你知道几个?

发布时间:2019-05-12 04:23:51 所属栏目:优化 来源:程序猿说
导读:0. Introduction Java 性能优化分为很多个方面,如系统优化、算法优化、代码优化等。代码优化是指开发人员在研发、测试过程中使用性能瓶颈分析工具快速定位出由于编码存在的性能瓶颈问题并持续进行优化。一种很常见的场景是测试同学在对服务进行压测时,无
副标题[/!--empirenews.page--]

Java 性能瓶颈分析工具 你知道几个?

0. Introduction

Java 性能优化分为很多个方面,如系统优化、算法优化、代码优化等。代码优化是指开发人员在研发、测试过程中使用性能瓶颈分析工具快速定位出由于编码存在的性能瓶颈问题并持续进行优化。一种很常见的场景是测试同学在对服务进行压测时,无论怎么增加并发应用的 TPS 一直保持在某个值进行左右波动,这个时候要怎么排查呢。为了可以准确获得运行过程中程序的性能数据,性能调优人员和开发者需要使用性能分析(profiling)辅助工具从全局视角来查看系统的运行状况。本文主要介绍通过熟练掌握 JMC、Tprofiler、JProfiler 等各种性能瓶颈分析工具,进而提高定位性能瓶颈、系统故障排查能力。

1. Java Mission Control

JMC(Java 任务控制)是 Java 7u40 新增加的性能监控工具。目前,Oracle Java 官方在今年 5 月份已经公布 Java Mission Control(JMC)的源代码已正式开源,此举得到了 Java 开发社区的高度赞赏。

JMC 源码地址: JMC source code

Java 性能瓶颈分析工具

JMC 工具主要由三个组件构成:Java 进程浏览器、JMX 控制台和 Java Flight 记录器等。

Java 进程浏览器能够利用 Java 自带的 JDP 协议自动发现本地或者远程正在使用的 Java 进程;

JMX 控制台通过 JMX 接口管理监控 JDK,它能够查看堆内存使用情况、CPU 负载等;

Java Flight Recorder 是一个内置在 JDK 中的监测和事件收集框架。收集的事件包括:磁盘 IO、GC、线程 sleep、线程 wait、Socket read/write 等。

下图显示了 JMC 启动后当前机器正在运行中的所有 Java 进程,选择一个进程进行性能监控。

如果使用的操作系统是 Mac 并且 JDK 版本为 1.8,启动 JMC 之后可能会发现操作界面被冷冻住了你没办法进行任何操作。产生这种现象的原因是 JDK 在升级过程中存在一个bug,具体解决方案可以参考:

  1. Jdk1.8 bug 

1.1 JFR 内存视图

JFR 模块包含一般信息、内存、代码、线程、IO、系统、事件等视图。其中,JFR 内存视图收集的信息非常丰富,可以获得内测使用量、GC 配置、GC 时间、对象统计时间等统计信息。下图展示了当前 JVM 进程 GC 时间的统计信息。

Java 性能瓶颈分析工具

1.2 JFR 代码视图

JFR 代码视图可以很容易统计出所有 Java 包占 JVM 进程所有方法调用的总时长。该视图很方便查看热点类、热点方法和热点包的调用次数、所占比例等。JFR 还提供了 I/O 视图、线程视图、系统视图从不同角度更好分析当前进程运行情况。

1.3 启动 JFR

Java 飞行记录器(JFR)是一种用于收集关于正在运行的 Java 应用程序的诊断和分析数据的工具。它集成到 Java 虚拟机(JVM)中,几乎不会造成性能开销,因此即使在负载非常大的生产环境中也可以使用它。

  • 首先,JVM 进程开启 JFR 功能需要在 JVM 启动参数(Jvm start flags)中增加两个参数
  1. -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 

默认情况下,JFR 在 JVM 中是禁用的。要启用 JFR,必须使用 - XX:+FlightRecorder 选项启动 Java 应用程序。因为 JFR 是一个商业特性,仅在基于 Java 平台、标准版(Oracle Java SE Advanced 和 Oracle Java SE Suite)的商业包中可用,所以您还必须使用 - XX:+UnlockCommercialFeatures 选项启用商业特性。

当然,也可以配置 JMC 进行远程监控,在启动 Java 程序时加上如下参数:

  1. -Dcom.sun.management.jmxremote  
  2. -Dcom.sun.management.jmxremote.port=18090  
  3. -Dcom.sun.management.jmxremote.ssl=false  
  4. -Dcom.sun.management.jmxremote.authenticate=false  
  5. -Djava.rmi.server.hostname=192.168.149.184  
  6. -XX:+UnlockCommercialFeatures  
  7. -XX:+FlightRecorder 

允许其它机器监控该程序,必须指定 -Djava.rmi.server.hostname=,如果不指定该配置,那么就只能在本机监控该程序。

控制监控的授权(让特定的用户才能连接 JMX 服务),需要设置

  1. -Dcom.sun.management.jmxremote.authenticate=true 

如果设置为 false 则不需要授权。

授权需要指定两个文件:jmxremote.password 和 jmxremote.access,password 文件主要是配置用户名和密码。

  • 其次,选中需要进行性能分析的进程,点击右键选择开启飞行记录器:

1.4 JFR 事件

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!