线上java服务的CPU很高,怎么进行问题排查?


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状态。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM