Java应用故障排查命令和工具

背景

对于在线运行的应用来说,会因为流量过高,程序bug,依赖故障,线程死锁,配置错误等一系列原因,导致系统不可用或者部分不可用,从而带来损失。对于技术人员来说,需要第一时间定位原因并解决故障,以将损失降到最低。本文将介绍常用的Java故障排查命令和工具。

常用命令

常用工具

1.Btrace

Brace是一个开源的Java程序动态跟踪工具。工作的基本原理是通过Hotspot虚拟机的HotSwap技术将跟踪的代码动态替换到被跟踪的Java程序内,以观察程序运行的细节。通过使用Btrace,可以在不修改代码,不重启应用的情况下,动态地查看程序运行的细节,方便地对程序进行调试。

Btrace的用法:

btrace [-I <include-path>] [-p <port>] [-cp <classpath>] <pid> <btrace-script> [<args>]

具体使用情况可以参考: https://kenai.com/projects/btrace。

2.JConsole

JConsole是一款JDK内置的图形化性能分析工具,它可以用来连接本地或者远程正在运行的JVM,对运行的Java应用程序的性能及资源消耗情况进行分析和监控,并提供可视化的图表对相关数据进行展现。

通过运行bin目录下的JConsole命令,它将自动搜索出本机所有的Java进程,双击其中一个进程开始监控。也可以使用远程连接功能,对远端的JVM进行监控。JConsole的连接界面如图所示:

由本地进程可以看出,当前机器有一个Java进程:sun.tools.jconsole.JConsole。选中JConsole进程,将进入JConsole主界面。

包括:概况,内存,线程,类,VM摘要,MBeans六个选项卡。如图所示:

概况栏显示了堆的使用,线程数量,类加载情况,CPU利用率等数据随着时间变化的情况。

内存栏展示了堆内存,非堆内存,老年代,Eden区,Survivor区,Metaspace等内存空间随时间变化的情况以及趋势。相当于

jstat命令的图形化展示:

线程栏展示了线程数量随时间变化的趋势,单个线程名称及线程栈详细内容。相当于jstack的图形化展示:

类栏展现了JVM加载的类数量随时间变化的情况。VM摘要栏展示了当前JVM的汇总信息,包括线程数量,类加载数量,堆的大小以及启动时指定的JVM参数等。

3.Memory Analyzer(MAT)

MAT全称为Eclipse Memory Analyzer,是一款功能强大的Java堆分析工具,能够快速找到占用堆内存空间最多的对象,以便程序进行优化,减少内存消耗。还能够通过进一步的分析,定位可能的内存泄漏问题。MAT的主界面如图所示:

通过单击“File”->"Open heap dump"菜单,可打开通过dump生成的堆快照并进行分析,以确定问题的所在。

4.VisualVM

4.1  VisualVM简介

VisualVM是一款功能强大的综合性工具,涵盖了JVM内存消耗监视,性能分析,线程以及堆转储分析,垃圾回收监视等几乎所有能包含进来的功能。是目前为止功能最为强大的运行,监视和故障排查程序。VisualVM不仅自身提供了强大的功能,还支持通过插件的方式进行功能扩展。

VisualVM安装后的界面如下所示:

下面将介绍VisualVM的一些常用功能,如内存监控,GC监控,应用程序分析,线程分析,堆dump分析,CPU以及内存采样,BTrace跟踪等。

4.2 内存和GC

VisualVM可以通过VisualGC插件来查看当前JVM中Eden,Survivor,Old,Perm各个内存空间的大小及已使用的空间占比,并且还能够查看内存区域空间随时间变化的情况,以及GC发生的次数和消耗时间,数据十分详尽。VisualVM的VisualGC插件安装和使用界面如下:

4.3 应用程序分析

VisualVM的Profiler可以查看到程序对CPU和内存的使用情况,如分析程序中执行次数最多最耗时的方法(热点方法),占用内存空间最多的对象。CPU Profile如图所示:

可以看到doLayout方法执行了76次,占用时间5.67ms。

4.4 线程分析

VisualVM的Threads可以看到程序当前的所有线程,线程状态和线程堆栈信息。如图所示:

通过单击ThreadDump按钮,可以查看和保留当前时刻的线程快照。如下图所示:

更多功能介绍可以参考官网:https://visualvm.github.io/

 

 

 

 

 

 

 

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值