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

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

每次分析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.1jrockit线程dump

1.jps

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

5.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文件


6.png

2.2真相大白

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


7.jpeg

2.3我的瓶颈所在

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

8.png


2.4最后附上工具地址

https://fastthread.io/

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


相关文章
|
6月前
|
算法 Unix Linux
【C/C++ 实用工具】性能分析工具一览
【C/C++ 实用工具】性能分析工具一览
293 0
|
6月前
|
数据可视化 关系型数据库 编译器
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
921 2
|
6月前
|
Web App开发 JavaScript 前端开发
JavaScript中的性能优化:代码优化技巧与性能分析工具
【4月更文挑战第22天】本文探讨JavaScript性能优化,包括代码优化技巧和性能分析工具。建议避免全局查找、减少DOM操作、使用事件委托、优化循环和异步编程以提升代码效率。推荐使用Chrome DevTools、Lighthouse和jsPerf等工具进行性能检测和优化。持续学习和实践是提升JavaScript应用性能的关键。
|
7天前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
35 1
|
7天前
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
12 1
|
1月前
|
Web App开发 监控 JavaScript
一些常用的 Vue 性能分析工具
【10月更文挑战第2天】
56 1
|
2月前
|
SQL 缓存 关系型数据库
MySQL高级篇——性能分析工具
MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long-query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为 10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SOL 查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。
MySQL高级篇——性能分析工具
|
2月前
|
监控 IDE Java
【Java性能调优新工具】JDK 22性能分析器:深度剖析,优化无死角!
【9月更文挑战第9天】JDK 22中的性能分析器为Java应用的性能调优提供了强大的支持。通过深度集成、全面监控、精细化分析和灵活报告生成等核心优势,性能分析器帮助开发者实现了对应用性能的全面掌控和深度优化。在未来的Java开发过程中,我们期待性能分析器能够继续发挥重要作用,为Java应用的性能提升贡献更多力量。
|
6月前
|
监控 Java 开发者
Java一分钟之-Java性能分析与调优:JProfiler, VisualVM等工具
【5月更文挑战第21天】本文介绍了Java性能优化的两个利器——JProfiler和VisualVM。JProfiler通过CPU Profiler、内存分析器和线程视图帮助解决过度CPU使用、内存泄漏和线程阻塞问题;VisualVM则聚焦于GC行为调整和类加载优化,以减少内存压力和提高应用性能。使用这些工具进行定期性能检查,是提升Java应用效率的关键。
168 0
|
3月前
|
存储 缓存 监控
Linux性能分析工具-perf并生成火焰图
Linux性能分析工具-perf并生成火焰图