- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
2021/12/2627|
在Java应用的性能分析决策树中,我会主要关注两个方面:堆和栈。
工具选型上花太多功夫,我们只需要选择易用、成本低的工具就可以了。当前开源的Java
工具已经完全可以实现所有的功能了。
之前我在专栏中提到过JVisualVM,这是一个我非常常用的工具之一。不过强调一
点,在全链路压测过程中,如果我们用基于k8s+docker的微服务分布式架构,那使用
JVisualVM会比较麻烦。因为它的每个Java实例都需要单独连接,并且要把容器中的端口
映射出来,操作上比较繁琐。
3/18
2021/12/2627|
我们的这个专栏的项目使用的是SpringCloud架构,这也是当前市场上最流行的一种架
构了。我选择的工具是SpringBootAdmin,在应用中集成了相关依赖,你可以打开
SpringBootAdmin,查看应用墙。
这个应用墙可以看到一个应用的所有实例。要注意的是,这里的绿色只是代表进程端口的
启动是正常的,并不表明这个应用性能就是好的。
如果你想看具体的性能分析决策树中的信息,可以点击实例进入到相应的界面中。下
面这张图展示的是我经常看的几个界面。
在上面的这个图里,我们不仅可以看到堆和非堆内存使用的情况,也同时可以判断GC的
效率,这就可以对应到我们性能分析决策树的GU和Memory三个部分的计数器
了。
4/18
2021/12/2627|
再来看一下线程视图:
程视图中,可以看到自打开此界面后的所有线程状态。我们可以通过这个视图判断线
程是否健康。
像上面这就是线程的blocked过多的情况。这时我们就要去使用jstack之类令去
打印栈信息,然后打到对的时间点上。
请注意,这个界面即使全是绿色也并不能说明性能就是好的。比如下面这
5/18
2021/12/2627|
这种情况下,我们还要进一步判断方法执行时间是不是过长。像上面这里,绿色段较
长的地方也是不合理的。这个界面要多观察一会,不能刚打开就判断,不然就看不到状态
随着时间变化的趋势了。
不过,要判断Java应用方法的执行时间,只看Java应用也是不行的。我们还要结合
上节课提到的操作系统的计数器做关联分析。
关联分析的逻辑就是:当uscpu(注意这里是uscpu,不要看错了,这可是关键的一个
起点)使用率过高时,查看相应的进程;当确定了是Java进程时,再到线程图(上面两张
图)界面查看方法的执行时间。
当我们点击线程图(上面两中的某段带有红颜色或绿颜色的线时,就可以看到相应
的Java栈了:
代码
1http-nio-8401-exec-884#86813daemonprio=5os_prio=0tid=0x00007f2868073000
2java.lang.Thread.State:
文档评论(0)