Java定位问题线程解析
作者:思想永无止境 时间:2023-08-09 22:04:27
前言
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就是死锁导致的。
来源:https://blog.csdn.net/u012643122/article/details/126277283
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
一文带你初识java中的String类
![](https://img.aspxhome.com/file/2023/1/91731_0s.png)
C#设置页面单位和缩放的方法
android通过拼音搜索中文的功能实现代码
![](https://img.aspxhome.com/file/2023/8/93268_0s.png)
Java Servlet简单实例分享(文件上传下载demo)
mybatis 运行时加载自定义mapper文件方式
![](https://img.aspxhome.com/file/2023/7/132057_0s.jpg)
JFinal使用ajaxfileupload实现图片上传及预览
图解Windows环境下Android Studio安装和使用教程
![](https://img.aspxhome.com/file/2023/4/120044_0s.png)
用命令行编译java并生成可执行的jar包方法
Java IO学习之缓冲输入流(BufferedInputStream)
C# 动态调用WebService的示例
Android实现图像切换器
![](https://img.aspxhome.com/file/2023/7/108247_0s.jpg)
AndroidStudio 实现加载字体资源的方法
![](https://img.aspxhome.com/file/2023/9/137629_0s.png)
浅谈Java内存区域与对象创建过程
c#通过unicode编码判断字符是否为中文示例分享
Spring Security OAuth 自定义授权方式实现手机验证码
![](https://img.aspxhome.com/file/2023/2/72282_0s.png)
SpringBoot配置actuator的代码
Java基础-Java的体系结构
![](https://img.aspxhome.com/file/2023/1/63501_0s.png)
Java中的break和continue关键字的使用方法总结
使用IDEA开发配置Java Web的初始化过程
![](https://img.aspxhome.com/file/2023/4/64794_0s.jpg)
WPF仿LiveCharts实现饼图的绘制
![](https://img.aspxhome.com/file/2023/8/129758_0s.gif)