linux如何使用jstack分析线程状态

在高并发,多线程环境下的java程序经常需要分析线程状态,本本是一个分析步骤无具体讲解(具体命令可自行google学习)

一般流程:

1.使用  jps -l 查看有哪些java程序在运行

2.使用 top 查看步骤1中进程号(pid或者vmid)所占用cpu以及内存情况(或者省略步骤1)

3.使用top -Hp pid 查看具体该pid下各个线程所占用的cpu情况(进程下的线程有一个nid,后面需要用到)

4.使用jstack pid 查看进程下各个线程的状态(线程共六种状态)(在3中的nid对应这儿具体的线程号)

    之所以会在3查询线程号是为了查看占用cpu最高的线程是具体在代码中的哪一个类中

    步骤四一般会把线程堆栈信息保存下来使用 jstack -l pid > pid.stack 之后用vim pid.stack把文件打开,然后在vim中查找编号为nid的线程的状态(主义里面nid是16进制的,而我们在步骤3中得到的nid为10进制的,所以先把它转化为16进制在去查找)

printf '%x\n' pid 可将pid输出为16进制(也可以通过计算算器得到)

当然如果是在windows下只需要通过一个jconsole工具(在jdk的bin目录下)一切都是图形化界面的就可以解决,推荐学习一下windows下的jconsole (主要是查看线程状态)、 jvisualvm(主要查看垃圾回收以及哪些程序消耗cpu较多)两个工具

当然是这些工具功能结合体的JProfiler更值得学习。

 

同时还有几个命令:

nload  查看网口带宽速度(与windows下任务管理器里面一样)

iostat -xm 1 间隔1秒打印磁盘读写速度

(多线程读写程序一般都会分析:线程状态、网口传输数据gps、磁盘读写速度)

 

可查看博客:https://www.jianshu.com/p/6690f7e92f27

                     http://www.importnew.com/23601.html

你可能感兴趣的:(linux)