异步任务

Arthas中的后台异步任务,使用了仿linux系统任务相关的命令。

命令 描述
jobs 查看后台任务列表,正在运行或暂停的任务
fg <job-id> 将后台任务拉到前台执行
bg <job-id> 将前台任务放到后台执行
kill <job-id> 终止任务

前台任务

前台任务特点一直占有终端,不终止命令任务不会结束。

前台任务可以通过Ctrl + C终止任务,可以通过Ctrl + Z暂停任务放在后台列表

示例

# 跟踪方法执行时长
trace demo.MathGame primeFactors
# Ctrl + C 后任务结束

# 跟踪方法调用栈
stack demo.MathGame primeFactors
# Ctrl + Z后任务暂停放在后台列表

# 查看当前任务
[arthas@4852]$ jobs
[7]*
       Stopped           stack demo.MathGame primeFactors
       execution count : 3
       start time      : Fri Apr 07 11:01:41 CST 2023
       timeout date    : Sat Apr 08 11:01:41 CST 2023
       session         : fad72f91-52a9-459a-806f-f2880d5eca45 (current)

# 继续将暂停任务放到前台执行
[arthas@4852]$ fg 7
# Ctrl + Z任务暂停放在后台列表

# 终止后台任务
[arthas@4852]$ kill 7

# 也可以转为后台任务继续执行
[arthas@4852]$ bg 7

后台任务

有的时候执行一条命令可能需要等一定周期才会监控到结果,这时候我们只需要后台任务输出即可。

示例

# 使用&使任务在后台执行 
# 这个时候会一直输出Console 因为primeFactors方法一直在执行 我们可以继续在终端输入命令
trace demo.MathGame primeFactors & 

# jobs可以看到后台任务正在执行
[arthas@4852]$ jobs
[10]*
       Running           stack demo.MathGame primeFactors &
       execution count : 3
       start time      : Fri Apr 07 11:07:13 CST 2023
       timeout date    : Sat Apr 08 11:07:13 CST 2023
       session         : 97cf2ec3-03a1-4b44-8bba-11763c0925b0 (current)

# 将任务拉到前台
[arthas@4852]$ fg 10

# 后台任务输出重定向
# 后台记录到文件输出
trace demo.MathGame primeFactors > /tmp/trace.txt &
# 后台记录追加到文件输出
trace demo.MathGame primeFactors >> /tmp/trace.txt &
# 不指定文件 默认保存在日志目录
trace demo.MathGame primeFactors > &

问题

有的时候在使用killbg命令时,Arthas会直接停止,不知道什么原因。

注意

  • 最多同时支持8个命令使用重定向将结果写日志
  • 请勿同时开启过多的后台异步命令,以免对目标 JVM 性能造成影响
  • 如果不想停止Arthas,继续执行后台任务,可以执行quit退出控制台(stop会停止Arthas服务)