arthas执行结果保存日志
1 方式一:命令行开启默认日志
默认情况下arthas执行结果是不保存日志的,当然我们通过arthas提供的命令行options
进行开启:
#### 关闭日志打印
[arthas@44607]$ options save-result false
NAME BEFORE-VALUE AFTER-VALUE
----------------------------------------
save-result true false
#### 开启日志打印
[arthas@44607]$ options save-result true
NAME BEFORE-VALUE AFTER-VALUE
----------------------------------------
save-result false true
[arthas@44607]$
日志会异步保存在 {user.home}/logs/arthas-cache/result.log
;
2 方式二:新版本arthas异步后台任务将结果存日志文件
该方法的关键是使用命令后面接上
>> &
,其中>> 代表输出重定向到日志文件,&意味着后台运行;如果>> 带了具体的文件或者路径名,则会保存在我们运行
java -jar arthas-boot.jar
的当前文件夹下;
trace demo.MathGame run --skipJDKMethod false >> &
trace demo.MathGame run --skipJDKMethod false >> ding.log &
此时命令会在后台异步执行,并将结果异步保存在文件(~/logs/arthas-cache/${PID}/${JobId})
中;
- 此时任务的执行不受session断开的影响;任务默认超时时间是1天,可以通过全局
options
命令修改默认超时时间; - 如果任务是trace,默认执行次数是100次,而不是一天;
- 此命令的结果将异步输出到文件中;此时不管
save-result
是否为true,都不会再往~/logs/arthas-cache/result.log 中异步写结果; - 如果只带&,将持续后台运行,但是日志还是会打印到控制台;
[arthas@44607]$ trace demo.MathGame run --skipJDKMethod false >> &
job id : 15
cache location : /Users/fwd/logs/arthas-cache/44607/15
[arthas@44607]$ jobs
[15]*
Running trace demo.MathGame run --skipJDKMethod false >> &
execution count : 10
start time : Sun Feb 16 16:30:04 CST 2020
cache location : /Users/fwd/logs/arthas-cache/44607/15
timeout date : Mon Feb 17 16:30:04 CST 2020
session : 5723744d-f387-4269-b33e-fdd3f2e111fd (current)
如下所示使用watch命令观察的结果
☁ 44607 watch -n 2 -d "tail -n 20 16"
☁ 44607 pwd
/Users/fwd/logs/arthas-cache/44607
---------------------------------------------------------------------
Every 2.0s: tail -n 20 15 fwding-mac.local: Sun Feb 16 16:34:32 2020
+---[0.001164ms] java.lang.StringBuilder:<init>() #28
+---[0.001211ms] java.lang.Integer:valueOf() #28
+---[0.032685ms] java.lang.String:format() #28
+---[min=0.001093ms,max=0.001202ms,total=0.002295ms,count=2] java.lang.StringBuilder:append(
) #28
+---[0.001267ms] java.lang.Exception:getMessage() #28
+---[9.21E-4ms] java.lang.StringBuilder:toString() #28
`---[0.04581ms] java.io.PrintStream:println() #28
`---ts=2020-02-16 16:34:32;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$A
ppClassLoader@55f96302
`---[0.226122ms] demo.MathGame:run()
+---[0.003362ms] java.util.Random:nextInt() #23
+---[0.027904ms] demo.MathGame:primeFactors() #24 [throws Exception]
+---[0.001249ms] java.lang.StringBuilder:<init>() #28
+---[0.001497ms] java.lang.Integer:valueOf() #28
+---[0.033104ms] java.lang.String:format() #28
+---[min=0.001101ms,max=0.001187ms,total=0.002288ms,count=2] java.lang.StringBuilder:append(
) #28
+---[0.001384ms] java.lang.Exception:getMessage() #28
+---[9.59E-4ms] java.lang.StringBuilder:toString() #28
`---[0.044684ms] java.io.PrintStream:println() #28