V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hengyunabc
V2EX  ›  开源软件

Alibaba Arthas 3.1.2 版本发布:增加 logger /heapdump/vmoption 命令,支持 tunnel server

  •  
  •   hengyunabc · 2019-09-10 10:47:12 +08:00 · 3508 次点击
    这是一个创建于 1936 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Arthas

    Arthas是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

    Arthas 3.1.2 版本持续增加新特性,下面重点介绍:

    • logger/heapdump/vmoption/stop命令
    • 通过 tunnel server 连接不同网络的 arthas,方便统一管控
    • 易用性持续提升:提示符修改为arthas@pid形式,支持ctrl + k清屏快捷键

    logger/heapdump/vmoption/stop 命令

    logger 命令

    查看 logger 信息,更新 logger level

    查看所有 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它的appenderRefAPPLICATION,即异步输出到文件里

    查看指定名字的 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 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 修复等,可以参考

    最后,Arthas 的在线教程考虑重新组织,欢迎大家参 与,提出建议:


    公众号

    欢迎关注横云断岭的专栏,专注 Java,Spring Boot,Arthas,Dubbo。

    横云断岭的专栏

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:17 · PVG 02:17 · LAX 10:17 · JFK 13:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.