广州建站外包,做维修那个网站发布信息好,上海网站建设与设计,河间做网站价格概述
Arthas#xff08;阿尔萨斯#xff09; 能为你做什么#xff1f; Arthas 是Alibaba开源的Java诊断工具#xff0c;深受开发者喜爱。
当你遇到以下类似问题而束手无策时#xff0c;Arthas可以帮助你解决#xff1a;
这个类从哪个 jar 包加载的#xff1f;为什么会…概述
Arthas阿尔萨斯 能为你做什么 Arthas 是Alibaba开源的Java诊断工具深受开发者喜爱。
当你遇到以下类似问题而束手无策时Arthas可以帮助你解决
这个类从哪个 jar 包加载的为什么会报各种类相关的 Exception我改的代码为什么没有执行到难道是我没 commit分支搞错了遇到问题无法在线上 debug难道只能通过加日志再重新发布吗线上遇到某个用户的数据处理有问题但线上同样无法 debug线下无法重现是否有一个全局视角来查看系统的运行状况有什么办法可以监控到JVM的实时运行状态怎么快速定位应用的热点生成火焰图
运行环境要求
Arthas支持JDK 6支持Linux/Mac/Windows采用命令行交互模式同时提供丰富的 Tab 自动补全功能进一步方便进行问题的定位和诊断。
快速安装
下载arthas-boot.jar然后用java -jar的方式启动
命令
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar注在运行第2条命令之前先运行一个java进程在内存中不然会出现找不到java进程的错误。
打印帮助信息
java -jar arthas-boot.jar -h如果下载速度比较慢可以使用aliyun的镜像
java -jar arthas-boot.jar --repo-mirror aliyun --use-http注如果是Linux可以使用以下命令解压到指定的arthas目录
unzip -d arthas arthas-packaging-3.1.7-bin.zip卸载
在 Linux/Unix/Mac 平台
删除下面文件
rm -rf ~/.arthas/
rm -rf ~/logs/arthas小结
因为jar包是绿色要卸载的话直接删除2个目录
.arthas安装目录
logs的日志记录目录快速入门attach一个进程
启动Demo
命令
下载已经打包好的arthas-demo.jar
curl -O https://alibaba.github.io/arthas/arthas-demo.jar在命令行下执行
java -jar arthas-demo.jar效果 启动arthas
因为arthas-demo.jar进程打开了一个窗口所以另开一个命令窗口执行arthas-boot.jar选择要粘附的进程arthas-demo.jar 如果粘附成功在arthas-demo.jar那个窗口中会出现日志记录的信息记录在~/logs目录下 如果端口号被占用也可以通过以下命令换成另一个端口号执行
java -jar arthas-boot.jar --telnet-port 9998 --http-port -14. 通过浏览器连接arthas
Arthas目前支持Web Console用户在attach成功之后可以直接访问http://127.0.0.1:3658/。
可以填入IP远程连接其它机器上的arthas。 默认情况下arthas只listen 127.0.0.1所以如果想从远程连接则可以使用 --target-ip参数指定listen的IP
快速入门常用命令接触
目标
dashboard仪表板通过thread命令来获取到arthas-demo进程的Main Class通过jad来反编译Main Classwatch
命令介绍
1. dashboard仪表板
输入dashboard(仪表板)按回车/enter会展示当前进程的信息按ctrlc可以中断执行。
注输入前面部分字母按tab可以自动补全命令
第一部分是显示JVM中运行的所有线程所在线程组优先级线程的状态CPU的占用率是否是后台进程等第二部分显示的JVM内存的使用情况第三部分是操作系统的一些信息和Java版本号
2. 通过thread命令来获取到arthas-demo进程的Main Class
获取到arthas-demo进程的Main Class
thread 392会打印线程ID 392的栈通常是main函数的线程。
3. 通过jad来反编译Main Class
jad demo.MathGame4. watch监视
通过watch命令来查看demo.MathGame#primeFactors函数的返回值
$ watch demo.MathGame primeFactors returnObj5. 退出arthas
如果只是退出当前的连接可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行端口会保持开放下次连接时可以直接连接上。
如果想完全退出arthas可以执行stop命令。
小结 如何启动arthas? java -jar arthas-boot.jar说说以下命令的作用
命令功能dashboard显示JVM中内存的情况JVM中环境信息thread显示当前进程所有线程信息jad反编译指定的类或方法watch监视某个方法的执行情况监视了返回值quitexit, stop退出或停止arthas
基础命令之一
help
作用
查看命令帮助信息
效果 cat
作用
打印文件内容和linux里的cat命令类似
如果没有写路径则显示当前目录下的文件
效果 grep
作用
匹配查找和linux里的grep命令类似但它只能用于管道命令
语法
参数列表作用-n显示行号-i忽略大小写查找-m 行数最大显示行数要与查询字符串一起使用-e “正则表达式”使用正则表达式查找
举例
只显示包含java字符串的行系统属性
sysprop | grep java显示包含java字符串的行和行号的系统属性
sysprop | grep java -n显示包含system字符串的10行信息
thread | grep system -m 10使用正则表达式显示包含2个o字符的线程信息
thread | grep -e opwd
作用
返回当前的工作目录和linux命令类似
pwd: Print Work Directory 打印当前工作目录
效果 cls
作用 清空当前屏幕区域
基础命令之二
session
作用
查看当前会话的信息
效果 reset
作用
重置增强类将被 Arthas 增强过的类全部还原Arthas 服务端关闭时会重置所有增强过的类
语法
还原指定类
reset Test还原所有以List结尾的类
reset *List还原所有的类
reset效果 version
作用
输出当前目标 Java 进程所加载的 Arthas 版本号
效果 history
作用
打印命令历史
效果 quit
作用
退出当前 Arthas 客户端其他 Arthas 客户端不受影响
stop
作用
关闭 Arthas 服务端所有 Arthas 客户端全部退出
效果 keymap
作用
Arthas快捷键列表及自定义快捷键
效果 Arthas 命令行快捷键
快捷键说明命令说明ctrl a跳到行首ctrl e跳到行尾ctrl f向前移动一个单词ctrl b向后移动一个单词键盘左方向键光标向前移动一个字符键盘右方向键光标向后移动一个字符键盘下方向键下翻显示下一个命令键盘上方向键上翻显示上一个命令ctrl h向后删除一个字符ctrl shift /向后删除一个字符ctrl u撤销上一个命令相当于清空当前行ctrl d删除当前光标所在字符ctrl k删除当前光标到行尾的所有字符ctrl i自动补全相当于敲TABctrl j结束当前行相当于敲回车ctrl m结束当前行相当于敲回车
任何时候 tab 键会根据当前的输入给出提示命令后敲 - 或 -- 然后按 tab 键可以展示出此命令具体的选项
后台异步命令相关快捷键
ctrl c: 终止当前命令ctrl z: 挂起当前命令后续可以 bg/fg 重新支持此命令或 kill 掉ctrl a: 回到行首ctrl e: 回到行尾
小结
命令说明session显示当前会话的信息进程的ID会话IDreset重置类的增强服务器关闭的时候会自动重置所有的类version显示arthas版本号quit退出当前会话不会影响其它的会话stop退出arthas服务器所有的会话都停止keymap获取快捷键
jvm相关命令之一
dashboard
作用
显示当前系统的实时数据面板按q或ctrlc退出
效果 数据说明
ID: Java级别的线程ID注意这个ID不能跟jstack中的nativeID一一对应NAME: 线程名GROUP: 线程组名PRIORITY: 线程优先级, 1~10之间的数字越大表示优先级越高STATE: 线程的状态CPU%: 线程消耗的cpu占比采样100ms将所有线程在这100ms内的cpu使用量求和再算出每个线程的cpu使用占比。TIME: 线程运行总时间数据格式为分秒INTERRUPTED: 线程当前的中断位状态DAEMON: 是否是daemon线程
thread线程相关
作用
查看当前 JVM 的线程堆栈信息
参数说明
参数名称参数说明数字线程id[n:]指定最忙的前N个线程并打印堆栈[b]找出当前阻塞其他线程的线程[i value]指定cpu占比统计的采样间隔单位为毫秒
举例
展示当前最忙的前3个线程并打印堆栈
thread -n 3当没有参数时显示所有线程的信息
thread显示15号线程的运行堆栈
thread 15找出当前阻塞其他线程的线程有时候我们发现应用卡住了 通常是由于某个线程拿住了某个锁 并且其他线程都在等待这把锁造成的。 为了排查这类问题 arthas提供了thread -b 一键找出那个罪魁祸首。
thread -b //排查死锁阻塞线程指定采样时间间隔每过1000毫秒采样显示最占时间的3个线程
thread -i 1000 -n 3查看处于等待状态的线程
thread --state WAITING