基础指令

简介: Arthas简介:通过`dashboard`查看线程信息,`jad`反编译类,`thread`分析线程堆栈及阻塞情况,`watch`监控方法参数与耗时,支持按状态或采样时间筛选。`quit`退出连接,`stop`终止服务。

1.dashboard
输入dashboard,按回车/enter,会展示当前进程的信息,按ctrl+c可以中断执行

● ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应
● NAME: 线程名
● GROUP: 线程组名
● PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
● STATE: 线程的状态
● CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
● TIME: 线程运行总时间,数据格式为分:秒
● INTERRUPTED: 线程当前的中断位状态
● DAEMON: 是否是daemon线程
2.jad反编译指令
输入:jad + 文件全路径,如我想查看主启动类,则:
jad com.arthas.ArthasApplication

3.thread
最忙的前N个线程并打印堆栈
thread -n 3

所有线程的信息
thread

指定线程的运行堆栈
thread id
如上有线程ID为37的,所以这里指明id=37

当前阻塞其他线程的线程
thread -b
无阻塞返回

有阻塞返回
"http-bio-8080-exec-4" Id=27 TIMED_WAITING
at java.lang.Thread.sleep(Native Method)
at test.arthas.TestThreadBlocking.doGet(TestThreadBlocking.java:22)

-  locked java.lang.Object@725be470 <---- but blocks 4 other threads!
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at test.filter.TestDurexFilter.doFilter(TestDurexFilter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at com.taobao.tomcat.valves.ContextLoadFilterValve$FilterChainAdapter.doFilter(ContextLoadFilterValve.java:191)
at com.taobao.eagleeye.EagleEyeFilter.doFilter(EagleEyeFilter.java:81)
at com.taobao.tomcat.valves.ContextLoadFilterValve.invoke(ContextLoadFilterValve.java:150)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:429)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
-  locked org.apache.tomcat.util.net.SocketWrapper@7127ee12
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

Number of locked synchronizers = 1
- java.util.concurrent.ThreadPoolExecutor$Worker@31a6493e

注意, 目前只支持找出synchronized关键字阻塞住的线程, 如果是java.util.concurrent.Lock, 目前还不支持。
指定采样时间间隔
thread -n 3 -i 间隔时间(ms)

查看指定状态的线程
thread –state
thread –state 状态
状态:[RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, NEW, TERMINATED]

4.watch
查看方法耗时出参
watch 类全路径 方法名 returnObj
如我有这样一个方法:

则指令为:
watch com.arthas.controller.ArthasController arthasTest returnObj

查看指定方法入参出参
watch com.arthas.controller.ArthasController arthasTest "{params,returnObj}" -x 2

观察异常信息

5.退出Arthas
如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行stop命令。

相关文章
|
2月前
|
人工智能 缓存 算法
ZCode大更新!GLM最佳Harness隆重登场!
今日GLM-5.3正式发布:编程能力跃升,内部体感评测较5.2提升50%,TerminalBench3.0、Agents&#39; Last Exam(CLI)等开源基准登顶第一。同期ZCode上线Goal/Subagents/闲时任务等重磅功能,以98.1%缓存命中率与智能Harness大幅提效,推动AI从“辅助执行”迈向“自主闭环”。
|
7月前
|
人工智能 Linux API
OpenClaw 全自动公众号发文实战:阿里云/本地搭建+Skill集成+百炼API配置完整教程
在内容创作与自媒体运营日益高效的2026年,依靠人工撰写、排版、上传、发布公众号文章已经无法满足高频更新需求。借助AI智能体实现文章自动生成、Markdown排版、图片上传、草稿同步、定时发布,已经成为内容团队与个人博主的核心竞争力。OpenClaw(Clawdbot)作为本地优先、高度可扩展的AI执行框架,搭配专门用于公众号同步的wechat-publisher技能,可以实现从文章生成到草稿入库的全流程自动化,彻底解放双手,大幅提升内容产出效率。
2916 0
|
12月前
|
Arthas 监控 Java
深入理解JVM《Arthas - 阿里开源Java诊断神器》
Arthas是阿里巴巴开源的Java诊断利器,无需重启应用即可动态追踪JVM运行状态。支持实时监控、线程分析、方法追踪、类反编译、热更新及火焰图生成,集众多工具之大成,助力开发者高效定位线上问题。
|
Arthas 存储 监控
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
1161 8
|
SQL Java 数据库连接
MyBatis痛点验证,使用 foreach 批量插入慢?
MyBatis痛点验证,使用 foreach 批量插入慢?
980 0
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
SQL XML Java
Mybatis中foreach的使用
【11月更文挑战第12天】MyBatis 的 `foreach` 标签用于在 SQL 语句中遍历集合或数组,支持批量插入、更新及多条件查询等操作。通过设置 `collection`、`item` 等属性,可动态生成 SQL 片段,实现高效的数据处理。示例包括批量插入用户信息、根据 ID 列表查询用户数据以及遍历 Map 查询分类下的产品。
1673 0
|
Prometheus Kubernetes Cloud Native
Collector的配置和使用
Collector的配置和使用
873 1
el-select 支持拼音搜索(含插件 pinyin-match 的使用)
el-select 支持拼音搜索(含插件 pinyin-match 的使用)
809 0
|
Java
springboot启动报错:“Error starting ApplicationContext. To display the conditions report re-run your appl
springboot启动报错:“Error starting ApplicationContext. To display the conditions report re-run your appl
3597 0

热门文章

最新文章