Java程序员的魔法杖-Arthas 3.1.2版本发布了
Arthas已经成为我日常运维、线上排查的必备之品,听说最近更新版本了,今天这篇文章看下又增加了什么新的能力。
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]$ loggername ROOTclass ch.qos.logback.classic.LoggerclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55level INFOeffectiveLevel INFOadditivity truecodeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jarappenders name CONSOLEclass ch.qos.logback.core.ConsoleAppenderclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55target System.outname APPLICATIONclass ch.qos.logback.core.rolling.RollingFileAppenderclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55file app.logname ASYNCclass ch.qos.logback.classic.AsyncAppenderclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55appenderRef [APPLICATION]
从appenders
的信息里,可以看到
CONSOLE
logger的target是System.out
APPLICATION
logger是RollingFileAppender
,它的file是app.log
ASYNC
它的appenderRef
是APPLICATION
,即异步输出到文件里
查看指定名字的logger信息
[arthas@2062]$ logger -n org.springframework.webname org.springframework.webclass ch.qos.logback.classic.LoggerclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55level nulleffectiveLevel INFOadditivity truecodeSource 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]$ vmoptionKEY VALUE ORIGIN WRITEABLE
---------------------------------------------------------------------------------------------HeapDumpBeforeFullGC false DEFAULT trueHeapDumpAfterFullGC false DEFAULT trueHeapDumpOnOutOfMemory false DEFAULT trueErrorHeapDumpPath DEFAULT trueCMSAbortablePrecleanW 100 DEFAULT trueaitMillisCMSWaitDuration 2000 DEFAULT trueCMSTriggerInterval -1 DEFAULT truePrintGC false DEFAULT truePrintGCDetails true MANAGEMENT truePrintGCDateStamps false DEFAULT truePrintGCTimeStamps false DEFAULT truePrintGCID false DEFAULT truePrintClassHistogramBe false DEFAULT trueforeFullGCPrintClassHistogramAf false DEFAULT trueterFullGCPrintClassHistogram false DEFAULT trueMinHeapFreeRatio 0 DEFAULT trueMaxHeapFreeRatio 100 DEFAULT truePrintConcurrentLocks false DEFAULT true
查看指定的option
[arthas@56963]$ vmoption PrintGCDetailsKEY 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]$ sessionName Value
-----------------------------------------------------JAVA_PID 86183SESSION_ID f7273eb5-e7b0-4a00-bc5b-3fe55d741882AGENT_ID URJZ5L48RPBR2ALI5K4VTUNNEL_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
往期精选
本号专注于后端技术、JVM问题排查和优化、Java面试题、个人成长和自我管理等主题,为读者提供一线开发者的工作和成长经验,期待你能在这里有所收获。
点在看,让更多看见。
Java程序员的魔法杖-Arthas 3.1.2版本发布了相关推荐
- Java程序员面试题
下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...
- java程序员入门先学什么开发者工具
学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率.更优雅的写代码.由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得 ...
- Java程序员必备基础:Java代码是怎么运行的?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:一个线程池 bug 引发的 GC 思考!个人原创+1博客:点击前往,查看更多 链接:https://segmen ...
- 作为一名Java程序员,你竟然不知道Instrumentation
转载自 作为一名Java程序员,你竟然不知道Instrumentation 作者:Yilun Fan 来源:http://1t.click/fMA 对于Java 程序员来说,Java Instru ...
- 毕业两年,工作三年Java程序员的一点点体会与建议
一.步入职业生涯从捡芝麻开始 都说现在找工作难,我认为,是真的难.钱多活少离家近,大部分人的梦想,这样的工作确实很难找. 我于2016年来到上海,那时我还没毕业,只不过因为觉得学校的生活足够的无聊与迷 ...
- 2019年Java程序员的学习路线
2019年Java程序员的学习路线 一.基础篇 面向对象 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Java如何实现的平台无关 JVM还支持哪些语言(Kot ...
- 一个即将30岁Java程序员的自诉,在内卷的大环境之下迷惘的大龄程序员该如何破局?
就是想写点什么 不知不觉自己即将步入30岁,到了很多人口中的中年,有时候一直在回想,这些年自己到底做了些什么,留下了些什么? 步入社会 毕业 2015年7月我从一个90%以上的人都不知道的二本院校毕业 ...
- java程序员平时都使用哪些软件??
java程序员平时使用的软件 神级开发工具 IntelliJ IDEA 平凡开发工具 eclipse 好的开发工具 myeclipse 服务器链接 xshell 服务器链接 putty 数据库连接工具 ...
- 作为一名合格的JAVA程序员需要点亮那些技能树?
转自:https://zhuanlan.zhihu.com/p/26035486 先看看这些程序员技能树,你掌握或了解哪些?OMG竟然有么多---震精!震精!!! 这是从450家企业的招聘信息中统计而 ...
最新文章
- 修改MONGODB 最大连接数
- 您的框架有多可扩展性?
- 洛谷 P2389 电脑班的裁员 解题报告
- 小波基函数构造matlab,五种常见小波基函数及其matlab实现全解.docx
- Go语言微服务开发框架:Go chassis
- vue data为什么是函数_由 Vue 中三个常见问题引发的深度思考
- BadBoy下载安装
- 计算机远程桌面连接连接不上,电脑远程桌面连接不上的解决方法
- android+6+wifi密码,Android 如何查看Wifi密码
- 计算机显示器一半有阴影,电脑显示器有阴影的解决方法,希望你们喜欢!
- 今天,你脸上还长痤疮吗?
- JAVA解题【We Are A Team】
- 华为荣耀屏鸿蒙,荣耀智慧屏:华为鸿蒙迈出的第一步
- 通信的数学理论_21机械丨数学、英语、专业课究竟考什么?
- 编写测试代码事物回滚案例
- 7-18 出租车计价
- 计算机科学与技术专业自荐信,计算机科学与技术专业个人自荐信
- 串口通信常用API总结
- metasploit介绍及使用
- linux u盘格式exfat,Ubuntu14.04不支持U盘exfat格式该如何解决
热门文章
- 用python实现判断9*9数独的正确性
- [转载]刘兴亮|给同一天发的这三款社交产品算算命
- 让照片开口讲话,让视频人物对口型
- 【Zotero】与坚果云配合使用同步失败解决方法
- ESP32使用AT MQTT 固件发布主题信息返回ERROR解决
- Word内嵌程序打开报错“Office已阻止访问以下嵌入对象,以便保护你的安全”
- 计算机课评课意见,计算机中心:开展听课评课力推信息化教学
- python基础--截图提取图中文字存入Excel表
- HDU-2859 Phalanx
- 2022.4.10 ShanDong Multi-University Training #1 QLU-team#8 の 赛后总结