java远程进程监控_用jstack监控远程主机上的java进程

本文介绍了如何使用jstack工具监控远程主机上的Java进程,通过生成dump文件获取进程内部线程的详细状态,包括线程名、线程状态、资源锁定等信息,以辅助分析和诊断问题。
摘要由CSDN通过智能技术生成

前面提到用visualvm监控远程主机上的java进程,这种方法的好处是可以“实时”监控,缺点是需要启动jstatd,且只能看到线程总数,无法显示每个线程的详细情况,jstack可以生成某一进程的dump,包含在特定时刻(命令执行时)Java进程内部各个线程的详细情况。

首先用"jps -l"找到目标进程的PID,然后用"jstack [PID]"获得dump,对于大型程序这个dump一般也比较大,所以用"jstack [PID] > dump_file_name"的方法将结果保存在文件dump_file_name里。

下面是dump文件中的一段:

" HSQLDB Timer @5a1b5e32 " daemon prio=3 tid=0x0000000101116800 nid=0x420a in Object.wait() [0xfffffffb5c2ff000]

java.lang.Thread.State : TIMED_WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

- waiting on <0xfffffffb721e7700> (a org.hsqldb.lib.HsqlTimer\(TaskQueue)

at org.hsqldb.lib.HsqlTimer\)TaskQueue.park(HsqlTimer.java:883)

- locked <0xfffffffb721e7700> (a org.hsqldb.lib.HsqlTimer\(TaskQueue)

at org.hsqldb.lib.HsqlTimer.nextTask(HsqlTimer.java:531)

- locked <0xfffffffb721e7700> (a org.hsqldb.lib.HsqlTimer\)TaskQueue)

at org.hsqldb.lib.HsqlTimer$TaskRunner.run(HsqlTimer.java:611)

at java.lang.Thread.run(Thread.java:662)

以上文本包含的信息包括:

线程名:HSQLDB Timer @5a1b5e32

锁住的资源:<0xfffffffb721e7700>

线程堆栈

线程类型:daemon;

线程优先级(prio):3

线程ID(tid):0x0000000101116800

线程状态:"Object.wait()"和"TIMED_WAITING"

下面的一段供对照:

" T-14319652 " prio=3 tid=0x000000010294d000 nid=0x4208 runnable [0xfffffffb5d5f8000]

java.lang.Thread.State: RUNNABLE

at org.hsqldb.ExpressionColumn.getValue(ExpressionColumn.java:627)

at org.hsqldb.ExpressionLogical.getValue(ExpressionLogical.java:1172)

at org.hsqldb.ExpressionLogical.getValue(ExpressionLogical.java:1120)

at org.hsqldb.ExpressionLogical.getValue(ExpressionLogical.java:1120)

at org.hsqldb.ExpressionLogical.getValue(ExpressionLogical.java:1120)

参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值