欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令 java中间件浏览器thread 

程序员文章站 2022-07-12 20:35:02
...
最近偶尔有用户反馈某些 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诊断相关的参数
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修复等,可以参考
本文作者:中间件小哥
原文链接:https://yq.aliyun.com/articles/718577?utm_content=g_1000079878
本文为云栖社区原创内容,未经允许不得转载。