美文网首页阿里云Linux我是程序员
Arthas 3.1.2 版本发布 | 增加 logger/he

Arthas 3.1.2 版本发布 | 增加 logger/he

作者: 阿里云云栖号 | 来源:发表于2019-09-18 10:59 被阅读0次

    最近偶尔有用户反馈某些 HTTP 接口出现超时问题,而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况。出现这种情况一般是web容器出现问题,客户端连

    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功能。

    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修复等,可以参考

    Release Note
    最后,Arthas的在线教程考虑重新组织,欢迎大家参与,提出建议,详情参考这里



    本文作者:中间件小哥

    阅读原文

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:Arthas 3.1.2 版本发布 | 增加 logger/he

        本文链接:https://www.haomeiwen.com/subject/zfohuctx.html