(史上最全)Java性能调优工具,你都知道哪些?

一、JDK指令

jps命令

jps用于列出Java的进程,jps还可以增加参数

  • -m用于输出传递给Java进程的参数

  • -l用于输出主函数的完整路径

  • -v可以用于显示传递给jvm的参数

jstat命令

jstat可以查看堆内存的使用情况以及gc情况,功能强大。

语法如下:

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Option :通常使用 -gcutil 查看gc情况
interval : 间隔时间,单位为秒或者毫秒
count : 打印次数,如果缺省则打印无数次

<option>可选参数如下:

  • jstat -class <pid> : 显示加载class的数量,及所占空间等信息
  • jstat -compiler <pid> : 显示VM实时编译的数量等信息
  • jstat -gc <pid> : 显示gc的信息,查看gc的次数,及时间
  • jstat -gccapacity <pid>: 显示VM内存中三代(young,old,perm)对象的使用和占用大小
  • jstat -gcutil <pid> : 统计gc信息(一般用的最多)
  • jstat -gcnewcapacity <pid> :new对象的信息及其占用量
  • jstat -gcold <pid> :old对象的信息
  • jstat -gcoldcapacity <pid> :old对象的信息及其占用量
  • jstat -gcpermcapacity <pid>: perm对象的信息及其占用量
  • jstat -gcutil <pid>:统计gc信息统计
  • jstat -printcompilation <pid>:当前VM执行的信息
  • jstat -printcompilation <pid> m n:当前VM执行的信息,并且每m毫秒打印一次,一共打印n次。eg:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次

其中就jstat -gcutil <pid>用的最多,示例如下:jstat其它示例解析
在这里插入图片描述

S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space区已使用空间的百分比 (jdk1.8之后,永久代被元空间取代,为M)
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young
GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

jstack命令

jstack用于生成线程快照(线程的堆栈信息及线程运行状态),主要目的是定位线程出现长时间停顿的原因,如线程间死锁死循环请求外部资源导致的长时间等待
 语法:jstack [Options] <pid>
 
Options:可选参数如下:

  • -F 强制线程转储
  • -m 打印java和本机帧(混合模式)
  • -l 长清单。打印关于锁的附加信息
  • -h 或-help打印此帮助消息

jstack 6548 > d:temp/m.dump线程堆栈信息输入到磁盘文件中,(> 输入的意思,6548是pid号)注意:m.dump是自动生成的文件,文件的后缀名也可以是txt格式等等

jhat命令

jhat可以对JVM中导出的文件进行分析,使用命令 jhat fileName 即可以在浏览器中输入http://localhost:7000查看内存信息。如果Dump文件太大需要加上-J-Xmx512m指定最大堆内存,如 jhat -J-Xmx512m [-port 9998] tmp.bin

分析内存还可以使用Eclipse的Memory Analyzer,插件地址http://download.eclipse.org/releases/juno,找到General Purpose Tools底下的Memory Analyzer并安装。

jinfo命令

jinfo可以用来查看正在运行的Java应用程序的扩展参数,甚至在运行时修改部分参数,它的基本语法为:

jinfo  <option>  <pid>

jinfo可以查看运行时参数:

jinfo -flag MaxTenuringThreshold 31518
-XX:MaxTenuringThreshold=15

jinfo还可以在运行时修改参数值:

> jinfo -flag PrintGCDetails 31518
-XX:-PrintGCDetails
> jinfo -flag +PrintGCDetails 31518
> jinfo -flag PrintGCDetails 31518
-XX:+PrintGCDetails
jmap命令

打印java进程的堆内存信息。

  • jmap -heap pid :查看heap的概要信息,GC使用的算法、heap的配置及wise heap的使用情况.
  • jmap -histo[:live] pid :查看堆内存中的每个类的类名、实例数量、内存占用大小
  • jmap -dump:live, format=b, file=fileName pid :将内存使用情况导出到文件中,再用jhatMATVisualVM分析查看,以便查找内存溢出原因

二:Linux指令

  • top, top -Hp pid
  • free
  • df
  • netstat, netstat -natp
  • 等等

三:工具

实时分析工具
  • Jconsole
  • VisualVM
  • JProfiler
  • JavaMelody
  • LambdaProbe
  • 等等

这里主要介绍两款工具Jconsole和VisualVM

Jconsole

jconsole可以监控Java应用程序(如jar应用、tomcat等),但被监视的应用程序必须和jconsole是用同一个用户运行的。jvisualvm的使用和jconsole类似,都是jdkbin目录自带的。

  • 本地监控: jconsole <pid>
  • 远程监控: jconsole [ hostname:port ]

使用远程监控需要配置jmx代理信息,修改Tomcat的bin目录下的catalina.bat,如果是springboot直接修改启动参数即可

set JAVA_OPTS= %JAVA_OPTS% -Djava.rmi.server.hostname=HostIP
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.port=8888
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false 
VisualVM

VisualVM详解及使用

离线分析工具
  • MemoryAnalyzer tool
  • Thread Dump Analyzer
  • 等等

四:诊断问题

上面这些命令及工具,都是用来诊断java代码问题的。常见的问题如下:

运行时问题-软件角度
  • 内存泄漏,对象未释放
  • 线程阻塞、死锁
  • 线程死循环
  • 网络IO连接超时时间过长
  • 磁盘不可写
  • 等等
运行时问题-硬件角度
  • 内存占用高
  • CPU占用高
  • 网络无反应
  • 硬盘空间满
  • 等等

开心一刻

一时髦女子走上公交车,见一空坐便掏出纸巾猛擦一阵,刚要坐不巧放一屁,旁边一男子笑道:“我KAO,真他妈干净,擦完还要吹吹”
在这里插入图片描述

如果觉得不错,请点个赞哦!

相关链接
https://www.cnblogs.com/anxiao/p/6796644.html
https://www.cnblogs.com/timlearn/p/4088626.html
https://www.cnblogs.com/Lawson/p/4796957.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值