当前位置:网站首页>How to do thread dump analysis in Windows Environment
How to do thread dump analysis in Windows Environment
2020-11-09 00:33:00 【Java old K】
Now most companies have their own complete set of monitoring system , For example, meituan's CAT, Our company's monitoring system is also based on CAT Do secondary development . General test environment or production environment has problems, you can directly use these systems to view the running situation of threads and memory , Analyze and solve problems .
It is necessary for us to understand the original process , That is, without the help of these systems , Use the most basic commands to solve , After all, it's helpful to understand these underlying implementations for your own development .
There are a lot of articles like this on the Internet , For example, check cpu Too high , Deadlock problem article , But most of it is about Linux How to do it in the environment , In fact, many problems can be found and checked in local development , So I'll mainly talk about Windows How to investigate in the environment , Here's an example of java Apply the troubleshooting method for deadlock problems .
There are two main ways , One is to use JVM Instructions +Process Explorer Tools , The other is to use jdk/bin In the catalog jvisualvm.exe Tools
One . JVM Instructions +Process Explorer
Commonly used JVM Instructions :
jps
It is mainly used to output jvm Running process statusjstack
View a certain java In process thread stack information
For all commands, please refer to the official documentation
Process Explorer yes windows The process manager of the system , You can view the corresponding pid( process id) Thread information under , It is convenient to locate which thread owns cpu High resources .
The screening process :
1. open Process Explorer Tools , Find one's own java application , If you don't know what's wrong java Which process is , Can be in windows Of cmd Input in the command window jps Command to see all java Application process id, Pictured :
If you're not sure which pid Is your java application , You can add -lm Parameters ,
namely :jps -lm
, Print out the detailed class name , It's easy to find the corresponding pid
Another way is in the task manager ( Task manager - see - Select column -pid) You can also find the corresponding pid
2. According to the first step we found pid stay Process Explorer The tool finds that line of record and double-click to open it Thread One column tab, You can see it java process pid The corresponding thread information ,TID It's the corresponding thread id, Pictured :
3. stay cmd The command line window uses jstack
Give orders to java Stack information of the application dump Local analysis , Of course, you can also analyze it directly in the command line window , But the general stack information is relatively large , All the thread information is in it , We only care about the stack information of the thread in question , In this way, you can use : jstack pid|findstr tid
This command finds the thread we care about id, But still suggest dump Search locally , there tid Pay attention to ,jstack
Thread in id It's in hexadecimal , You need to put the number 2 Step inside tid( Decimal system ) To hexadecimal , Pictured :
jstack After the order -l The parameter represents the output lock information
- open dump text file , Through hexadecimal tid Find the corresponding stack information , You can locate the specific business code call location :
As can be seen from the figure above, the code that caused the problem is DeadLockTest Of 70 That's ok , The status of the thread is BLOCKED, because dump Thread with -l Parameters of (jstack -l pid), So in dump Bottom of jvm Will output deadlock information :
Obviously Thread-1 The thread is waiting 0x000000076b940cf0 This lock , It holds 0x000000076b940d00 This lock , and Thread-0 Just waiting for 0x000000076b940d00 This lock , The lock it holds is 0x000000076b940cf0, In this way, two threads wait for each other's locks , It leads to deadlock .
Two . jvisualvm.exe Tools
This tool is in JDK Of the installation directory bin Folder , Open it and find the corresponding one pid, It's actually a visit to us JVM Stack information in the virtual machine , The advantage is that it is intuitive and convenient to view the running situation of the thread , If there is a deadlock, it will be prompted , Pictured :
Source of the article :javakk.com/176.html
版权声明
本文为[Java old K]所创,转载请带上原文链接,感谢
边栏推荐
猜你喜欢
Introduction to nmon
非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue
On buffer overflow
Flink's datasource Trilogy 3: customization
使用容器存储表格数据
Flink的DataSource三部曲之三:自定义
APP 莫名崩溃,开始以为是 Header 中 name 大小写的锅,最后发现原来是容器的错!
Have you ever thought about why the transaction and refund have to be split into different tables
接口测试工具Eolinker进行post请求
The vowels in the inverted string of leetcode
随机推荐
梁老师小课堂|谈谈模板方法模式
B. protocal has 7000eth assets in one week!
Installation record of SAP s / 4hana 2020
Programmers should know the URI, a comprehensive understanding of the article
Teacher Liang's small class
移动大数据自有网站精准营销精准获客
使用递增计数器的线程同步工具 —— 信号量,它的原理是什么样子的?
1.操作系统是干什么的?
Why need to use API management platform
The road of cloud computing - going to sea - small goal: Hello world from. Net 5.0 on AWS
Flink's datasource Trilogy 3: customization
How to make scripts compatible with both Python 2 and python 3?
Execution of SQL statement
What courses will AI programming learn?
Octave basic syntax
C++邻接矩阵
API生命周期的5个阶段
实现图片的复制
Are there many Python application scenarios?
上线1周,B.Protocal已有7000ETH资产!