top和jstack分析堆栈问题

1.top

在服务器上,我们可以通过top命令查看各个进程的cpu使用情况,它默认是按cpu使用率由高到低排序的

top和jstack分析堆栈问题_第1张图片

由上图中,我们可以找出pid为21340的java进程,它占用了最高的cpu资源

2. top -Hp pid

通过top -Hp 21340可以查看该进程下,各个线程的cpu使用情况,如下

top和jstack分析堆栈问题_第2张图片

3. jstack pid

通过top命令定位到cpu占用率较高的线程之后,接着使用jstack pid命令来查看当前java进程的堆栈状态, jstack21350后,内容如下:

top和jstack分析堆栈问题_第3张图片

 在thread dump中,每个线程都有一个nid,我们找到对应的nid(5366),发现一直在跑(24行)

4. jstack -l [PID] >/tmp/log.txt

其实,前3个步骤,堆栈信息已经出来啦。但是一般在生成环境,我们可以把这些堆栈信息打到一个文件里,再回头仔细分析哦~

Dump 文件分析关注重点

    runnable,线程处于执行中

    deadlock,死锁(重点关注)

    blocked,线程被阻塞 (重点关注)

    Parked,停止

    locked,对象加锁

    waiting,线程正在等待

    waiting to lock 等待上锁

    Object.wait(),对象等待中

    waiting for monitor entry 等待获取监视器(重点关注)

    Waiting on condition,等待资源(重点关注),最常见的情况是线程在等待网络的读写
 

你可能感兴趣的:(jvm,linux,运维,服务器)