天天看點

Arthas 3.1.2 版本釋出 | 增加 logger/heapdump/vmoption 指令

最近偶爾有使用者回報某些 HTTP 接口出現逾時問題,而 web 服務端的 Trace 監控沒有出現 http 傳回值為 503 等異常情況。出現這種情況一般是web容器出現問題,用戶端連

Arthas 3.1.2 版本釋出 | 增加 logger/heapdump/vmoption 指令

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指令

檢視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

功能。

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診斷相關的參數

檢視所有的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

在新版本裡,增加了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 3.1.2 版本釋出 | 增加 logger/heapdump/vmoption 指令

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

最後,Arthas的線上教程考慮重新組織,歡迎大家參與,提出建議,詳情參考

這裡