2

学会这个Thread Dump分析工具,让您秒变性能分析大师!

 2 years ago
source link: https://www.heapdump.cn/article/2657990
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

学会这个Thread Dump分析工具,让您秒变性能分析大师!

张磊_805720
Thread Dump
FastThread
2天前

每次分析thread dump,我都会用肉眼扫描这dump中的线程状态,并企图发现可能存在的死锁,十几万行太难了!有时候记不太清楚各种等待、阻塞的原因,我都偷偷打开一篇博客边看边分析,很明显我还没把原理熟记于心!互联网上讲thread dump的文章太多了,本篇文章也不想讲这个,那么就结合实战讲讲有什么自动分析或可视化分析的工具吧,降低下难度和门槛!

1.实战背景

最近某省项目项目经常出现服务卡死,没法接收数据。该项目对完提供接口,各地市调用接收数据入库。项目架构:jboss5.1,jrockit 1.6, spring mvc。
同事们拿到jboss日志后发现是jboss线程池满了,因此决定调大线程池,代码如下

      <Connector protocol="HTTP/1.1" port="9999" address="${jboss.bind.address}"
               connectionTimeout="20000" redirectPort="${jboss.web.https.port}"
      maxThreads="150" acceptCount="8000"
       />

在设置jboss的参数中,maxThreads(最大线程数)和acceptCount(最大等待线程数)是两个非常重要的指标,直接影响到程序的QPS。
但是治标不治本,运行一段时间后有异常了!

1.1思考

  • 为什么会这样?如果请求数超过了maxThreads(最大线程数)和acceptCount(最大等待线程数),应该拒绝服务,不应该产生卡死呀?

  • 同事准备打开代码加执行时间调试,不知道从何入手。
    那么我们为什么不能从jvm入手,从底层来分析问题,找到性能瓶颈?

1.2来动手吧!

因此我给运维同学说,再次卡死的时候给我提取点线索!然后我把操作手册发给他!

1.2.1 jrockit 线程 dump

1.jps
打开cmd输入jps 找到jboss的进程id例如 11964
2021012521342657.png

2.线程dump
jrcmd.exe 11964 print_threads >d:/threaddump.txt

1.2.2 分析 dump

收到的dump文件足足十几万行,看得眼花缭乱,怎么办呐?**话不多说,上杀手锏!fastthread

2.fastthread简介

Java Thread Dump Analyzer,Troubleshoot JVM crashes, slowdowns, memory leaks, freezes, CPU Spikes。

2.1打开工具,上传dump文件

20210125213442283.png

2.2真相大白

我们可以看到报表给出的潜在风险,相同栈跟踪、频繁调用的方法、cpu占用过高线程、阻塞线程、gc线程、线程堆栈长度、复杂的死锁、死锁、无法有效回收的线程、异常、线程调用栈图、调用树。
20210125213519883.jpg

2.3我的瓶颈所在

大量的http请求,没法从连接池获取链接,进行数据库访问而等待!当等待超过jboss设置的线程数就会报错。因此赶快找到数据库连接池配置增大最大连接数!
20210125213553426.png

2.4最后附上工具地址

https://fastthread.io/
可惜的是该工具免费版使用有限制,下次分享一个国产更强大的工具!

1人觉得很赞
1541 阅读

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK