2021-03-12

优化Java程序的实用工具!

工欲善其事必先利其器,为你呈上一箩筐性能优化工具,必有一款满足你,废话不多说,直奔主题。

  1. hprof 工具

hprof 工具是通过织入监控代码,来对 Java 程序进行监控的一款工具。可以监控 Java 程序在运行时占用的 CPU,及统计堆内存使用等。

例如:每隔 10 毫秒采样 CPU 消耗信息,并把信息保存到 hprof.txt 文件中。

java -agentlib:hprof=cpu=times,interval=10,file=hprof.txt class

指令运行完,打开 hprof.txt 便很容易统计出哪些方法的运行耗时较长。
在这里插入图片描述

例如:输出 Java 应用程序中各个类所占用的内存百分比。

java -agentlib:hprof=heap=sites,file=hprof.txt class
备注:若未指定 file=hprof.txt,则默认会生成 java.hprof.txt 文件

打开输出的文件,效果如下。
在这里插入图片描述

例如:将 Java 应用程序的堆快照保存在文件 core.hprof 中,然后就可以使用 VisualVM 等工具来分析这个堆文件啦。

java -agentlib:hprof=heap=dump,format=b,file=core.hprof class

采用 VisualVM 工具打开 core.hprof 文件进行分析堆快照,效果如下。
在这里插入图片描述

  1. JConsole 工具

JConsole 是 Java 自带的图形化性能监控工具,可以让你摆脱命令行排查问题的痛苦。通过它,会非常容易的监测 Java 程序的运行情况。
在这里插入图片描述

2.1. 连接要监控的 Java 程序

首先进入 JDK 安装之后的 bin 目录,若是配置过 Java 的环境变量,直接运行 JConsole 就行,效果如下。
在这里插入图片描述

若是要监控本地 Java 进程,直接选择列表中的名称进行连接即可。

若是要监控远程 Java 进程,需要在远程 Java 程序启动时,需要加上下面几句话。

# 远程服务器的ip地址
-Djava.rmi.server.hostname=127.0.0.1 
# 指定jmx监听的端口
-Dcom.sun.management.jmxremote.port=8099 
# 指定jmx监听的端口
-Dcom.sun.management.jmxremote.rmi.port=8099 
# 是否开启ssl
-Dcom.sun.management.jmxremote.ssl=false 
# 是否开启认证
-Dcom.sun.management.jmxremote.authenticate=false

若是在 IDEA 开发工具中进行验证,按照下图进行配置,跑程序就行。
在这里插入图片描述

若是命令行启动时,按照下述方式配置,启动就行。

java -cp . -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=8099 -Dcom.sun.management.jmxremote.rmi.port=8099  -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false className

启动远程 Java 程序,JConsole 输入远程服务 IP 和 端口,连接即可。
在这里插入图片描述

2.2. 监控 Java 程序概况
在这里插入图片描述

如图所示,JConosle 连接上要监控的 Java 程序后,可以很方便的查看堆内存使用量、线程数量、加载类的数量以及 CPU 的占用率。

2.3. 内存监控
在这里插入图片描述

如图所示,在 JConsole 提供的内存监控页面,不仅能看到堆内存的使用情况,而且能查看非堆区的内存使用情况等等。另外,还提供了让 Java 应用强制进行一次 GC 的功能。

  1. VisualVM 工具

Visual VM 是可以替代 jstat、jmap、jhat、jstack 命令的一款故障诊断和性能监控的可视化工具,甚至可以替代 JConsole,所以我们还是有必要进行了解一下。

3.1 连接要监控的 Java 程序

首先进入 JDK 安装的 bin 目录,运行 jvisualvm,启动起来后和 JConsole 一样,可以选择本地和远程进行连接,效果如下。
在这里插入图片描述

本次着重介绍一下这款工具能干啥,如何连接 Java 程序就不带着一起做实验啦,不过已把操作步骤帮你梳理好了,照着做就行啦
在这里插入图片描述

3.2 概述
在这里插入图片描述

如图所示,通过 VisualVM 提供的概述功能页,可以很方便的查看 Java 程序的进程 ID、JVM 参数、系统属性等等信息。

3.3 监视
在这里插入图片描述

这块和 JConsole 很像,VisualVM 将 CPU 使用情况、堆使用情况、类加载信息以及线程都做了图形界面展示,可以很直观的进行监测。

3.4 线程监控
在这里插入图片描述

VisualVM 可以展示详细的线程信息,让线程信息一览无余,并且会自动进行死锁检测,如果在当前程序中找到死锁,则会提示“检测到死锁”。另外,通过线程 Dump可以导出当前所有线程的堆栈信息。

3.5 抽样器
在这里插入图片描述

内存抽样器效果图:
在这里插入图片描述

  1. 写最后

程序员编码那是本能,但是若能更好的解决生产问题,则会彰显个人才能。

工具一箩筐,你也别嫌多,因为总有一款适合你。但是工具说再多,若不进行实践,一切皆枉然,纸上得来终觉浅,只有实践才是硬道理!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值