Arthas
是Alibaba開源的Java診斷工具,深受開發者喜愛。
Github:https://github.com/alibaba/arthas
文檔:https://alibaba.github.io/arthas
Arthas 3.1.2版本持續增加新特性,下面重點介紹:
logger/heapdump/vmoption/stop
命令通過tunnel server連接不同網絡的arthas,方便統一管控
易用性持續提升:提示符修改爲
arthas@pid
形式,支持ctrl + k
清屏快捷鍵
logger/heapdump/vmoption/stop命令
logger命令
查看logger信息,更新logger level
https://alibaba.github.io/arthas/logger.html
查看所有logger信息
以下面的logback.xml
爲例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="APPLICATION" />
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n
</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC" />
</root>
</configuration>
使用logger
命令打印的結果是:
[arthas@2062]$ logger
name ROOT
class ch.qos.logback.classic.Logger
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
classLoaderHash 2a139a55
level INFO
effectiveLevel INFO
additivity true
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
appenders name CONSOLE
class ch.qos.logback.core.ConsoleAppender
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
classLoaderHash 2a139a55
target System.out
name APPLICATION
class ch.qos.logback.core.rolling.RollingFileAppender
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
classLoaderHash 2a139a55
file app.log
name ASYNC
class ch.qos.logback.classic.AsyncAppender
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
classLoaderHash 2a139a55
appenderRef [APPLICATION]
從appenders
的信息裏,可以看到
CONSOLE
logger的target是System.out
APPLICATION
logger是RollingFileAppender
,它的file是app.log
ASYNC
它的appenderRef
是APPLICATION
,即異步輸出到文件裏
查看指定名字的logger信息
[arthas@2062]$ logger -n org.springframework.web
name org.springframework.web
class ch.qos.logback.classic.Logger
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
classLoaderHash 2a139a55
level null
effectiveLevel INFO
additivity true
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
更新logger level
[arthas@2062]$ logger --name ROOT --level debug
update logger level success.
heapdump命令
dump java heap, 類似jmap命令的heap dump功能。
https://alibaba.github.io/arthas/heapdump.html
dump到指定文件
[arthas@58205]$ heapdump /tmp/dump.hprof
Dumping heap to /tmp/dump.hprof...
Heap dump file created
只dump live對象
[arthas@58205]$ heapdump --live /tmp/dump.hprof
Dumping heap to /tmp/dump.hprof...
Heap dump file created
vmoption命令
查看,更新VM診斷相關的參數
https://alibaba.github.io/arthas/vmoption.html
查看所有的option
[arthas@56963]$ vmoption
KEY VALUE ORIGIN WRITEABLE
---------------------------------------------------------------------------------------------
HeapDumpBeforeFullGC false DEFAULT true
HeapDumpAfterFullGC false DEFAULT true
HeapDumpOnOutOfMemory false DEFAULT true
Error
HeapDumpPath DEFAULT true
CMSAbortablePrecleanW 100 DEFAULT true
aitMillis
CMSWaitDuration 2000 DEFAULT true
CMSTriggerInterval -1 DEFAULT true
PrintGC false DEFAULT true
PrintGCDetails true MANAGEMENT true
PrintGCDateStamps false DEFAULT true
PrintGCTimeStamps false DEFAULT true
PrintGCID false DEFAULT true
PrintClassHistogramBe false DEFAULT true
foreFullGC
PrintClassHistogramAf false DEFAULT true
terFullGC
PrintClassHistogram false DEFAULT true
MinHeapFreeRatio 0 DEFAULT true
MaxHeapFreeRatio 100 DEFAULT true
PrintConcurrentLocks false DEFAULT true
查看指定的option
[arthas@56963]$ vmoption PrintGCDetails
KEY VALUE ORIGIN WRITEABLE
---------------------------------------------------------------------------------------------
PrintGCDetails false MANAGEMENT true
更新指定的option
[arthas@56963]$ vmoption PrintGCDetails true
Successfully updated the vm option.
PrintGCDetails=true
stop命令
之前有用戶吐槽,不小心退出Arthas console之後,shutdown
會關閉系統,因此增加了stop
命令來退出arthas,功能和shutdown
命令一致。
通過tunnel server連接不同網絡的arthas
https://alibaba.github.io/arthas/web-console.html
在新版本里,增加了arthas tunnel server的功能,用戶可以通過tunnel server很方便連接不同網絡裏的arthas agent,適合做統一管控。
啓動arthas時連接到tunnel server
在啓動arthas,可以傳遞--tunnel-server
參數,比如:
as.sh --tunnel-server 'ws://47.75.156.201:7777/ws'
目前
47.75.156.201
是一個測試服務器,用戶可以自己搭建arthas tunnel server
如果有特殊需求,可以通過
--agent-id
參數裏指定agentId。默認情況下,會生成隨機ID。
attach成功之後,會打印出agentId,比如:
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki https://alibaba.github.io/arthas
tutorials https://alibaba.github.io/arthas/arthas-tutorials
version 3.1.2
pid 86183
time 2019-08-30 15:40:53
id URJZ5L48RPBR2ALI5K4V
如果是啓動時沒有連接到 tunnel server,也可以在後續自動重連成功之後,通過 session命令來獲取 agentId:
[arthas@86183]$ session
Name Value
-----------------------------------------------------
JAVA_PID 86183
SESSION_ID f7273eb5-e7b0-4a00-bc5b-3fe55d741882
AGENT_ID URJZ5L48RPBR2ALI5K4V
TUNNEL_SERVER ws://47.75.156.201:7777/ws
以上面的爲例,在瀏覽器裏訪問 http://47.75.156.201:8080/ ,輸入 agentId
,就可以連接到本機上的arthas了。
Arthas tunnel server的工作原理
browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent
https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md
易用性持續提升
提示符修改爲
arthas@pid
形式,用戶可以確定當前進程ID,避免多個進程時誤操作[arthas@86183]$ help
增加
ctrl + k
清屏快捷鍵
總結
總之,3.1.2
版本的Arthas新增加了logger/heapdump/vmoption/stop
命令,增加了tunnel server,方便統一管控。另外還有一些bug修復等,可以參考
Release Note: https://github.com/alibaba/arthas/releases/tag/3.1.2
最後,Arthas的在線教程考慮重新組織,歡迎大家參與,提出建議:
https://github.com/alibaba/arthas/issues/847