如何排查线上Java程序运行情况

本文介绍了几种常用的Java应用性能分析工具,包括jps、jinfo、jstat、jmap、jhat、jstack等,通过这些工具可以获取到运行日志、异常堆栈、堆使用情况、GC情况等信息,帮助开发者定位并解决Java应用中的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目上线后,不可能有debug模式,所以会长借助一些工具帮忙分线线上的运行情况,这些运行时信息包括但不限于运行日志、异常堆栈、堆使用情况、GC情况、JVM参数情况、线程情况等。主要介绍一些常见的分析命令:

1. jps

  • jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。非常关键的一点:jps会查找当前用户权限下的所有java进程。
  • jps -v 输出传递给JVM的参数
  • jps -m 输出传递给Main函数的参数

2.jinfo

  • jinfo -pid 输出Java运行环境的系统参数

3. jstat

  • jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控
  • jstat –class<pid> : 显示加载class的数量,及所占空间等信息
  • jstat -compiler <pid>显示VM实时编译的数量等信息
  • jstat -gc <pid>: 可以显示gc的信息,查看gc的次数,及时间 <jstat -gc 5828 250 5 表示每隔250毫秒收集一次进程5828垃圾手机情况,一共查询5次>
  • jstat -gcutil <pid>:统计gc信息,百分比

字段说明:

字段说明
NGCMN新生代最小容量
NGCMX新生代最大容量
NGC当前新生代容量
S0C第一个Survivor区大小
S1C第二个Survivor区的大小
ECEden区的大小
OGCMN老年代最小容量
OGCMX老年代最大容量
OGC当前老年代大小
OC当前老年代大小
MCMN最小元数据容量
MCMX最大元数据容量
MC当前元数据空间大小
CCSMN最小压缩类空间大小
CCSMX最大压缩类空间大小
CCSC当前压缩类空间大小
YGC年轻代gc次数
FGC老年代GC次数

4.jmap

  • 主要打印Java堆内存细节快照,堆Dump是反应Java堆使用情况的内存镜像,其中主要包括系统信息虚拟机属性完整的线程Dump所有类和对象的状态等。 一般,在内存不足、GC异常等情况下,就会怀疑有内存泄漏。
  • jmap -heap pid 查询堆内存的使用情况
  • jmap -histo pid 查看内存中对象数量和大小
  • jmap -dump:format=b,file=heapDump pid 生成名字为heapDump的dump文件

5.jhat

  • 一般在jmap生成dump文件后,用jhat来分析。jhat heapDump

6.jstack

  • jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

7. 使用NMT分析内存使用情况

jcmd <pid> VM.native_memory detail

常见问题的确认:

1、使用jps查看进程id

2、用jstat -gc 查询GC情况

3、使用jstat -gccause 输出上次GC原因

4、用jmap -dump:format=b,file=xxx pid生成dump文件

5、用jhat等分析堆

6、用jstack分析线程情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值