性能优化-01(定位问题方式介绍)

1. 利用jdk 命令定位

  •   查看java 进程cpu使用率最高的线程,按shift + p 按照cpu 排序,shift +m 按照内存排序
top -Hp 8515
  • 把线程ID转为16进制,假设进程 23549 cpu使用率最高
printf "%x\n" 23549
5bfd
  • 查看堆栈信息
jstack 23496 |grep 5bfd -A 30

2. arthas 定位JVM 问题、

  • arthas介绍

Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。截至本篇文章编写时,已经收获 Star 17000+。

Arthas 官方文档十分详细,本文也参考了官方文档内容,同时在开源在的 Github 的项目里的 Issues 里不仅有问题反馈,更有大量的使用案例,也可以进行学习参考。

  • arthas 应用场景

得益于 Arthas 强大且丰富的功能,让 Arthas 能做的事情超乎想象。下面仅仅列举几项常见的使用情况,更多的使用场景可以在熟悉了 Arthas 之后自行探索。是否有一个全局视角来查看系统的运行状况?为什么 CPU 又升高了,到底是哪里占用了 CPU ?运行的多线程有死锁吗?有阻塞吗?程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?有什么办法可以监控到 JVM 的实时运行状态?

  • 安装运行
# github下载
wget https://alibaba.github.io/arthas/arthas-boot.jar
# 或者 Gitee 下载
wget https://arthas.gitee.io/arthas-boot.jar
# 打印帮助信息
java -jar arthas-boot.jar -h

# 运行方式
sh as.sh
#或者
java -jar arthas-boot.jar
  • 常用命令介绍

  • 官方文档

开源地址:https://github.com/alibaba/arthas

官方文档:https://alibaba.github.io/arthas

3. 分享一个开源小工具定位

  • shell脚本下载地址:
wget --no-check-certificate https://github.com/oldratlee/useful-scripts/archive/release-2.x.zip
unzip release-2.x.zip
  • 使用方式,进入bin目录下执行
 ./show-busy-java-threads 
  • 常用命令如下

#从所有JAVA线程找出最消耗CPU的线程,默认5个

show-busy-java-threads.sh

show-busy-java-threads.sh -c <要显示的线程栈数>

show-busy-java-threads.sh -c <要显示的线程栈数> -p <指定的JAVA process>

show-busy-java-threads.sh -a <输出记录到文件>

show-busy-java-threads.sh -t <重复执行的次数> -i <重复执行的间隔秒数>

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章