Arthas
- 一、下载和启动
- 1、官网地址
- 2、下载
- 3、启动
- 4、退出
- 二、常用命令
- 1、dashboard:当前系统的实时数据面板
- 2、profiler:监控进程的cpu\内存使用情况。细致到某个方法
- 采集与生成报告
- 查看 profiling 状态
- 查看 profiler 自身的内存占用
- 3、thread:查看当前线程信息,查看线程的堆栈
- 展示当前最忙的前 N 个线程并打印堆栈
- 默认按照 CPU 增量时间降序排列,只显示第一页数据
- 4、stack:输出当前方法被调用的调用路径
- 5、trace:方法内部调用路径,并输出方法路径上的每个节点上耗时
- 6、watch:函数执行数据观测
- 7、tt:记录下指定方法每次调用的入参和返回信息
- 三、案例
- 1、排查内存占用过高
- 2、排查CPU占用过高:持续监控法
- 3、排查CPU占用过高:实时查询法
- END
一、下载和启动
1、官网地址
官方网站:https://arthas.aliyun.com/
命令列表:https://arthas.aliyun.com/doc/commands.html
2、下载
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
3、启动
java -jar arthas-boot.jar
选择应用 java 进程:输入数字【1】开始监控进程id22337的进程,输入【2】则监控3490的进程
* [1]: 22337 test-a.jar
[2]: 3490 test-b.jar
[3]: 19843 xxx.jar
[4]: 3732 xxx.jar
[5]: 8807 .xxx.jar
[6]: 31895 xxx.jar
[7]: 30777 xxx.jar
[8]: 9726 xxx.jar
显示以下界面则监控成功
4、退出
如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出 arthas,可以执行stop命令。
二、常用命令
1、dashboard:当前系统的实时数据面板
当运行在 Ali-tomcat 时,会显示当前 tomcat 的实时信息,如 HTTP 请求的 qps, rt, 错误数, 线程池信息等等。
详细示例:https://arthas.aliyun.com/doc/dashboard.html
参数名称 | 参数说明 |
---|---|
[i:] | 刷新实时数据的时间间隔 (ms),默认 5000ms |
[n:] | 刷新实时数据的次数 |
命令
dashboard
2、profiler:监控进程的cpu\内存使用情况。细致到某个方法
命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图
详细示例:https://arthas.aliyun.com/doc/profiler.html
参数名称 | 参数说明 |
---|---|
action | 要执行的操作 |
actionArg | 属性名模式 |
[i:] | 采样间隔(单位:ns)(默认值:10’000’000,即 10 ms) |
[f:] | 将输出转储到指定路径 |
[d:] | 运行评测指定秒 |
[e:] | 要跟踪哪个事件(cpu、 alloc(内存)、lock、cache-misses 等),默认是 cpu |
采集与生成报告
1、开启采集
profiler start --event alloc
2、采集数量
profiler getSamples
3、停止采集,生成报告
profiler stop --format html
查看 profiling 状态
profiler status
查看 profiler 自身的内存占用
profiler meminfo
3、thread:查看当前线程信息,查看线程的堆栈
详细示例:https://arthas.aliyun.com/doc/thread.html
参数名称 | 参数说明 |
---|---|
id | 线程 id |
[n:] | 指定最忙的前 N 个线程并打印堆栈 |
[b] | 找出当前阻塞其他线程的线程 |
[i ] | 指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200 |
[–all] | 显示所有匹配的线程 |
展示当前最忙的前 N 个线程并打印堆栈
thread -n 3
默认按照 CPU 增量时间降序排列,只显示第一页数据
thread
4、stack:输出当前方法被调用的调用路径
很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。
详细示例:https://arthas.aliyun.com/doc/stack.html
查询近三次指定类下的指定方法调用情况
stack com.xxx.xxxService findList -n 3
5、trace:方法内部调用路径,并输出方法路径上的每个节点上耗时
trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
详细示例:https://arthas.aliyun.com/doc/trace.html
查询近三次指定类下的指定方法调用情况
trace com.xxx.xxxService findList -n 3
6、watch:函数执行数据观测
让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。
详细示例:https://arthas.aliyun.com/doc/watch.html
查询近三次指定类下的指定方法调用情况
watch com.xxx.xxxService findList -n 3
7、tt:记录下指定方法每次调用的入参和返回信息
watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。
详细示例:https://arthas.aliyun.com/doc/tt.html
查询近三次指定类下的指定方法调用情况
tt com.xxx.xxxService findList -n 3
三、案例
1、排查内存占用过高
使用火焰图查看内存分配情况
profiler start --event alloc 采集内存分配情况
profiler getSamples 已采集的数量
profiler stop --format html 关闭采集,并生成html文件
2、排查CPU占用过高:持续监控法
使用火焰图查看CPU分配情况
profiler start --event cpu 采集内存分配情况
profiler getSamples 已采集的数量
profiler stop --format html 关闭采集,并生成html文件
3、排查CPU占用过高:实时查询法
使用thread查询cpu过高的线程
thread pid查看线程堆栈
END
创作不易,感谢点赞
创作不易,感谢点赞
创作不易,感谢点赞
创作不易,感谢点赞
创作不易,感谢点赞
创作不易,感谢点赞