JVM性能排查 CPU篇

知识点:
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

然后敲jstack pid >【目录】的方式把线程快照输出到文件

我们也可以查询某个线程号将他转化为16进制到文件中查询定位到确定的线程

遇到卡顿有问题的时候可以连续导出线程快照,分析快照中是否存在某段程序一直在执行,定位问题源头。

火焰图
仅仅适用于linux环境

  1. 从github上下载async-profiler
    git clone github.com/jvm-profili…

2) 进去下载好的项目进行编译
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.svg

3)JVisualVM
这是jdk自带的

4) jprofiler
简介:
JProfiler是用于分析J2EE软件性能瓶颈并能准确定位到Java类或者方法有效解决性能问题的主流工具,它通常需要与性能测试工具如:LoadRunner配合使用,因为往往只有当系统处于压力状态下才能反映出性能问题。
安装jprofiler

运行此exe

安装完毕使用页面向导
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即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值