推荐一个生产环境问题排查利器( 三 )


推荐一个生产环境问题排查利器

文章插图
 
?
#cost>200(单位是ms)表示只有当耗时大于200ms时才会输出,过滤掉执行时间小于200ms的调用
?
「8、观察当前对象中的全局属性」
$ watch com.liusy.arthas_demo.controller.ArthasController test 'target'
推荐一个生产环境问题排查利器

文章插图
 
如果想查看方法运行前后,当前对象中的全局属性,可以使用target关键字,代表当前对象
然后使用target.field_name访问当前对象的某个全局属性
$ watch com.liusy.arthas_demo.controller.ArthasController test 'target.service'(3)trace方法内部调用路径,并输出方法路径上的每个节点上耗时
trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路 。
class-pattern 类名表达式匹配method-pattern 方法名表达式匹配condition-express 条件表达式[E] 开启正则表达式匹配,默认为通配符匹配[n:] 命令执行次数#cost 方法执行耗时例如:
trace com.liusy.arthas_demo.controller.ArthasController test
推荐一个生产环境问题排查利器

文章插图
 
按照耗时过滤:
trace com.liusy.arthas_demo.controller.ArthasController test #cost>1
推荐一个生产环境问题排查利器

文章插图
 
(4)stack输出当前方法被调用的调用路径
很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令 。
class-pattern 类名表达式匹配method-pattern 方法名表达式匹配condition-express 条件表达式[E] 开启正则表达式匹配,默认为通配符匹配[n:] 执行次数限制例如:
按照耗时查询,只会打印出耗时小于30ms的堆栈情况
stack com.liusy.arthas_demo.controller.ArthasController test #cost<30
推荐一个生产环境问题排查利器

文章插图
 
(5)sc查看jvm已加载的类信息
Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 [d]、[E]、[f] 和 [x:] 。
参数说明:
class-pattern 类名表达式匹配method-pattern 方法名表达式匹配[d] 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的ClassLoader等详细信息 。如果一个类被多个ClassLoader所加载,则会出现多次[E] 开启正则表达式匹配,默认为通配符匹配[f] 输出当前类的成员变量信息(需要配合参数-d一起使用)[x:] 指定输出静态变量时属性的遍历深度,默认为 0,即直接使用 toString 输出
?
class-pattern支持全限定名,如com.liusy.demo,也支持com/liusy/demo这样的格式.
?
?
sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开options disable-sub-class true开关
?
1、查看类的静态变量信息
sc -df 类的全限定名
推荐一个生产环境问题排查利器

文章插图
 
(6)sm查看已加载类的方法信息
“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息 。
sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到 。
class-pattern 类名表达式匹配method-pattern 方法名表达式匹配[d] 展示每个方法的详细信息[E] 开启正则表达式匹配,默认为通配符匹配
推荐一个生产环境问题排查利器

文章插图
 
(7)dashboard当前进程的实时数据面板(包括内存,线程等信息),按ctrl+c退出 。
数据说明:
ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应NAME: 线程名GROUP: 线程组名PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高STATE: 线程的状态CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比 。TIME: 线程运行总时间,数据格式为分:秒INTERRUPTED: 线程当前的中断位状态DAEMON: 是否是daemon线程


推荐阅读