1、命令:top
说明:输入大写P,对占用cpu的进程进行排序,查看哪个进程占用的cpu最高,找到占用cpu最高的进程pid。
2、命令:jps
说明:查看占用cpu最高的进程对应的哪个服务
3、命令:top -Hp pid
说明:找到这个进程中占用cpu最高的线程
4、命令:printf %x tid
说明:将线程id转换成16进制,前面再加上0x
5、命令:jstack pid<开始的进程id> | grep 0xtid<0x加上上一步转换出来的线程id>
说明:打印出这个线程的信息,有线程的名称,线程id(tid),操作系统对应的线程id(nid)
总结:
对于jstack日志,我们要着重关注如下关键信息
Deadlock:表示有死锁
Waiting on condition:等待某个资源或条件发生来唤醒自己。具体需要结合jstacktrace来分析,比如线程正在sleep,网络读写繁忙而等待
Blocked:阻塞
Waiting on monitor entry:在等待获取锁
如果说系统慢,那么要特别关注Blocked,Waiting on condition
如果说系统的cpu耗的高,那么肯定是线程执行有死循环,那么此时要关注下Runable状态。