查询当前JVM的阻塞线程
thread -b
可以看到 CPU 使用较高的方法和行数
thread id
打印mybatis查询sql
watch org.apache.ibatis.executor.SimpleExecutor doQuery '{params[0].resource,params[0].id,params[4].sql,params[4].parameterObject,returnObj,throwExp}' -x 3
打印mybatis查询某个dao的sql
watch org.apache.ibatis.executor.SimpleExecutor doQuery '{params[0].resource,params[0].id,params[4].sql,params[4].parameterObject,returnObj,throwExp}' 'params[4].sql.contains("sql语句")' -x 3
打印mybatis查询某个dao的特定sql(最实用的)
watch org.apache.ibatis.executor.SimpleExecutor doQuery '{params[0].resource,params[0].id,params[4].sql,params[4].parameterObject,returnObj,throwExp}' 'params[0].id.contains("namespace.id")' -x 3
查询mongo的执行语句(arthas + mongo慢日志排查接口性能问题_arthas排查接口慢-CSDN博客)
-- command = "query"/ "insert"/ "delete"
db.system.profile. find ( { op : { $ eq : 'query'}}).pretty()
watch org.springframework.data.mongodb.core.MongoTemplate find '{params,returnObj,throwExp}' 'params[0]=="t_alarm"' -x 2
watch org.springframework.data.mongodb.core.MongoTemplate count '{params,returnObj,throwExp}' -x 2
watch org.springframework.data.mongodb.core.MongoTemplate aggregate '{params,returnObj.mappedResults.size,throwExp}' -x 2
打印某个url请求接口的返回数据(每个项目不同)
watch com.zsz.common.utils.HttpUtils post '{params,params[1],returnObj,throwExp}' 'params[0].contains("url请求地址")' -x 3
打印接口返回的某个特定数据(每个项目不同)
watch com.zsz.common.utils.HttpUtils post '{params,params[1],returnObj,throwExp}' 'returnObj.contains("返回的特定内容")' -x 3
查询多个方法的执行过程和耗时(接口超时定位)
trace -E 包路径+类名1|包路径+类名2 方法名1|方法名2|方法名3
查看价值的类变量
watch package.Class method '{target}' -x 3
tt命令,时空隧道,记录多次执行数据
记录package.Class里的method方法
tt -t package.Class method
查询所有已记录的方法(is-exp方法是否抛出异常)
tt -l
查看某个记录的详细信息,其中index是记录的索引
tt -i index
实用ognl表达式,方法同watch
tt -i index -w 'params[0].{name}' -x 2
重新调用某条记录(当后台数据发生变化时,返回会不同)
tt -i index -p
热部署(本地编译好包放到环境上,解决环境临时问题避免换包,重启后失效,有可能执行失败)
redefine xxx.class