Java定位问题线程解析

 更新时间:2022年11月22日 09:19:28   作者:思想永无止境  
这篇文章主要介绍了Java定位问题线程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前言

  • ps命令的作用是显示进程信息的。
  • |符号,是个管道符号,表示左右两边两个命令同时执行。
  • grep命令是查找(Global Regular Expression Print),能使用正则表达式搜索文本,然后把匹配的行显示出来。

命令参数如果前面的参数没有输入值,那么可以多个合并在一起,如-mp等同于-m -p。

grep -A -B -C 属于上下文控制(Context control),使用规则如下:

  • grep -A 显示匹配指定内容及之后的n行
  • grep -B 显示匹配指定内容及之前的n行
  • grep -C 显示匹配指定内容及其前后各n行

查看是哪个进程占用了CPU

通过top命令,查看CPU使用率高的进程,看看COMMAND是不是java。

查看这个进程号对应的是哪个java程序

此步骤主要是在服务器部署多个java程序时,查看进程具体的包名,如果服务器只部署了一个jar可以忽略此步骤。

方案1

使用jps显示所有的java应用程序

jps -l

方案2

使用ps|grep搜索所有的java应用程序

ps -ef|grep java

查看这个进程中哪个线程占用了CPU 方案1,使用pidstat查看线程CPU占用率

pidstat -t -p pid

通过top获取的pid,使用pidstat -t -p pid查询进程下的线程。

方案3

使用ps查看线程CPU使用时长

ps -mp pid -o THREAD,tid,time

参数含义:

  • -m显示所有的线程
  • -p pid进程使用cpu的时间
  • -o该参数后是用户自定义格式

将这个线程号转16进制(如果是java程序)

将CPU占有率高或CPU使用时间长的线程号转换为16进制(因为后面的jstack里的线程号是16进制),并且将其中的字母转成小写字母。

System.out.println(Integer.toHexString(10003999).toLowerCase());

在jstack中找到这个线程的堆栈信息

使用jstack [进程号] 打印当前的进程堆栈;

jstack 39836

返回值说明:

  • prio,表示线程优先级,就是Thread中定义的线程优先级。
  • os_prio,表示线程在操作系统的优先级。
  • tid,表示Java内的线程ID,同样在Thread类中。
  • nid,表示线程在操作系统的线程ID,16进制,我们要的就是这个。

从打印的信息中,找到之前拿到的线程号

看看这个线程在做什么

jstack 39836 | grep tid -A60 #tid为小写的16进制线程ID

可以将CPU占有率高的线程都看一下。

jstack打印的信息可以多关注:Java stack information for the threads listed above:,如果有发现Found 1 deadlock就是死锁导致的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot 自动配置的实现

    Spring Boot 自动配置的实现

    这篇文章主要介绍了Spring Boot 自动配置的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found的解决方案(亲测可用)

    Plugin ‘org.springframework.boot:spring-boot-maven-plug

    这篇文章给大家介绍了Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found的解决方案,亲测可用,文中给出了两种解决方法,需要的朋友可以参考下
    2024-01-01
  • 浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别

    下面小编就为大家带来一篇浅谈mybatis中的#和$的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 分析设计模式之模板方法Java实现

    分析设计模式之模板方法Java实现

    所谓模板方法模式,就是一个对模板的应用,就好比老师出试卷,每个人的试卷都是一样的,这个原版试卷就是一个模板,可每个人写在试卷上的答案都是不一样的,这就是模板方法模式。它的主要用途在于将不变的行为从子类搬到超类,去除了子类中的重复代码
    2021-06-06
  • Java中this关键字的用法详解

    Java中this关键字的用法详解

    我知道很多朋友都和我一样,在JAVA程序中似乎经常见到this,自己也偶尔用到它,但是到底this该怎么用,却心中无数,下面这篇文章主要给大家介绍了关于Java中this关键字用法的相关资料,需要的朋友可以参考下
    2023-05-05
  • 使用Java实现在PDF插入页眉页脚

    使用Java实现在PDF插入页眉页脚

    在处理PDF文档时,有时需要为文档中的每一页添加页眉和页脚,这篇文章主要为大家详细介绍了如何使用Java为PDF文件添加页眉、页脚,感兴趣的可以了解下
    2024-03-03
  • java中使用interrupt通知线程停止详析

    java中使用interrupt通知线程停止详析

    这篇文章主要介绍了java中使用interrupt通知线程停止详析,文章介绍的是使用interrupt来通知线程停止运行,而不是强制停止,详细内容需要的小伙伴可以参考一下
    2022-09-09
  • spring如何解决循环依赖问题详解

    spring如何解决循环依赖问题详解

    这篇文章主要给大家介绍了关于spring如何解决循环依赖问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java中try-catch的使用及注意细节

    Java中try-catch的使用及注意细节

    现在有很多的语言都支持try-catch,比如常见的就是c++,java等,这篇文章主要给大家介绍了关于Java中try-catch的使用及注意细节的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Java实现与JS相同的Des加解密算法完整实例

    Java实现与JS相同的Des加解密算法完整实例

    这篇文章主要介绍了Java实现与JS相同的Des加解密算法,结合完整实例形式分析了java及js实现des加密与应用的具体操作技巧,需要的朋友可以参考下
    2017-11-11

最新评论