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