知识点:
1)jstack
2)火焰图
3)JVisualVM
4)Jprofiler
首先谈下线程状态:
1)runnable :只有处于runnable的线程才会消耗CPU
2)waiting on condition:表示线程在等待某一个条件的发生,来把自己唤醒
waiting(parking)一直等某个条件发生
Timed_waiting(parking) 定时 ,即使条件不来,也会定时唤醒自己
3)waiting 佛如monitor entry :线程状态是blocked,线程在等待monitor锁(synchronized关键字)
4 in object.wait :当线程获取到monitor锁,如果发现线程继续运行的条件没有满足,则调用wait方法,释放monitor锁,此时等待的线程状态就是in object.wait状态
warning (on object monitor)
timed_waiting(on object monitor)
jstack
首先我们启动一下项目,然后可以采用jps或者任务管理器查看进程pid
遇到卡顿有问题的时候可以连续导出线程快照,分析快照中是否存在某段程序一直在执行,定位问题源头。
火焰图
仅仅适用于linux环境
- 从github上下载async-profiler
git clone github.com/jvm-profili…
cd async-profiler
make 编译完成之后我们能在项目中多看到一个build文件夹吗,这是我们需要的东西 采集60s数据生成文件 ./profiler.sh -d 60 -o collapsed -f /opt/collapsed.txt 1535
下载火焰图FlameGraph git clone github.com/brendangreg…
生成火焰图 ./flamegraph.pl --colors=java /opt/collapsed.txt > /opt/flamegraph.svg3)JVisualVM
这是jdk自带的
4) jprofiler
简介:
JProfiler是用于分析J2EE软件性能瓶颈并能准确定位到Java类或者方法有效解决性能问题的主流工具,它通常需要与性能测试工具如:LoadRunner配合使用,因为往往只有当系统处于压力状态下才能反映出性能问题。
安装jprofiler
安装完毕使用页面向导
1.1 Open session
在 start center 中,打开 Open session标签,在窗口中显示所有预先定义的会话,如上图:
你可以选择一个会话,点击 OK来打开预定义的会话。
会话也可以被修改、复制、删除和排序。
也可以菜单中选择 session --> Open session,打开 Open session窗口。
1.2 New session
会话能够通过两种途径创建:
第一种:人工配置:使用[New session]按钮手工配置一个新的session,配置完成后,开始运行(如何配置详见下面) 第二种:通过集成向导:使用集成向导上的三个按钮:[New server integration] 、[New remote integration] 和 [New applet integration] 。
会话创建完成后可以立即运行。在 Open session标签页中能够看到新建的会话。
使用我们项目部署的那个tomcat版本 由于我们测试的tomcat部署在本地所以我们选择本机,remote则是远程,远程的话请选择此选项,并且补上服务器ip 选择jdk版本 选择jprofiler启动方式【在这边我们选择第二项】 选择我们监控的tomcat 端口号默认即可 next即可
finish即可
选择ok即可