![98274693c60616e6cdc20f4ebbad037c.png](https://img-blog.csdnimg.cn/img_convert/98274693c60616e6cdc20f4ebbad037c.png)
前 言
从Tomcat8开始数据库连接池组件由dbcp改为dbcp2,数据库连接池的配置参数也发生了变化导致有些参数没有生效从而引起应用程序性能问题。本文主要介绍如何通过java的堆栈日志进行分析定位。
首先需要保存堆栈dump文件,如下所示:
· jstack命令保存java线程dump
![23ab2b58e93f522567c6557dc1cee72e.png](https://img-blog.csdnimg.cn/img_convert/23ab2b58e93f522567c6557dc1cee72e.png)
·jmap命令保存java堆dump
![881fbeb804ed4dca795736f6e2dc3a3b.png](https://img-blog.csdnimg.cn/img_convert/881fbeb804ed4dca795736f6e2dc3a3b.png)
Thread Dump
打开stack.log,观察发现类似下图信息。
![c53f1e29fbcbb8583f9b74977af19b71.png](https://img-blog.csdnimg.cn/img_convert/c53f1e29fbcbb8583f9b74977af19b71.png)
① 线程名称
② 守护线程标志
| daemon表示该线程为守护线程,非守护线程该列为空。
③ 优先级
| prio表示线程优先级默认为5,10表示最高。
④ 线程ID
| nid表示十六进制的线程ID,可以结合top -Hp $pid中十进制的线程ID,方面查找占用CPU资源的线程。
⑤ 线程状态
| waiting on condition:等待资源
| waiting for monitor entry:等待获取监视器
| in Object.wait():对象等待中
| runnableÿ