Arthas

记录一次 Arthas 使用

谁都会走 提交于 2020-08-19 22:56:38
【Arthas 官方社区正在举行征文活动,参加即有奖品拿~ 点击投稿 】 前言 疫情期间,在家办公,每天都是 007,感觉自己已经升级为熊猫特工了,心累,身体疲惫!!! 今天终于有时间休息一下,然后记录一下在家办公期间 Arthas 的简单使用。 下载安装 方式一: 推荐使用 IDEA 插件下载 Cloud Toolkit 来使用 Arthas Cloud Toolkit 是阿里云发布的免费本地 IDE 插件,帮助开发者更高效地开发、测试、诊断并部署应用。通过插件,可以将本地应用一键部署到任意服务器,甚至云端(ECS、EDAS、ACK、ACR 和 小程序云等);并且还内置了 Arthas 诊断、Dubbo工具、Terminal 终端、文件上传、函数计算 和 MySQL 执行器等工具。不仅仅有 IntelliJ IDEA 主流版本,还有 Eclipse、Pycharm、Maven 等其他版本。 方式二: 直接下载 启动:java -jar arthas-boot.jar 这里需要重点说明一下:必须使用和目标进程相同的用户,否则启动不成功。 问题背景 本人前天刚上线一个任务。由于某产品手误,误操作了线上数据,要求帮忙把数据删除了。 这尼玛的真坑啊,明显是坑老子。 还好有先见之明,没次做任务的时候多多少少都会写几个后门工具( 不是为了删库跑路,而是这些后门在特定情况下真能应急使用

几个工具的收藏

帅比萌擦擦* 提交于 2020-08-19 20:42:52
1、Java troubleshooting工具 https://github.com/alibaba/arthas/blob/master/README_CN.md 2、接口文档生成工具 https://swagger.io/ 3、mysql 性能可视化工具 http://www.lepus.cc/post/60 来源: oschina 链接: https://my.oschina.net/u/4290163/blog/4287205

运维救火必备:问题排查与系统优化手册(结合惨案现身说法)

与世无争的帅哥 提交于 2020-08-19 17:32:11
软件工程领域存在一个共识:维护代码所花费的时间要远多于写代码。而整个代码维护过程中,最惊心动魄与扣人心弦的部分,莫过于问题排查(Trouble-shooting)了。特别是那些需要 7x24 小时不间断维护在线业务的一线服务端程序员们,大大小小的问题排查线上救火早已成为家常便饭,一不小心可能就吃成了自助餐 —— 竖着进躺着出,吃不了也兜不住。 本文分享作者在服务端问题排查方面的一些经验,包括常见问题、排查流程、排查工具,结合实际项目中发生过的惨痛案例进行现身说法。 一 、问题排查 1、常见问题 Know Your Enemy:知己知彼,百战不殆。 日常遇到的大部分问题,大致可以归到如下几类: 逻辑缺陷:e.g. NPE、死循环、边界情况未覆盖。 性能瓶颈:e.g. 接口 RT 陡增、吞吐率上不去。 内存异常:e.g. GC 卡顿、频繁 FGC、内存泄露、OOM。 并发/分布式:e.g. 存在竞争条件、时钟不同步。 数据问题:e.g. 出现脏数据、序列化失败。 安全问题:e.g. DDoS 攻击、数据泄露。 环境故障:e.g. 宿主机宕机、网络不通、丢包。 操作失误:e.g. 配置推错、删库跑路(危险动作,请勿尝试..)。 上述分类可能不太完备和严谨,想传达的点是:你也可以积累一个这样的 checklist,当遇到问题百思不得其解时,耐心过一遍,也许很快就能对号入座。 2、排查流程

用 Arthas “庖丁解牛”

不羁岁月 提交于 2020-08-19 16:47:38
作者 | Halimao Java、go 爱好者( https://github.com/halimao/ ) 【Arthas 官方社区正在举行征文活动,参加即有奖品拿哦~ 点击投稿 】 生产环境的 bug 开发环境无法复现怎么办?关键位置没有打印日志信息不足怎么办?莫慌,骚年。让强大的 Arthas法师来 carry,带你去生产环境"遨游"闯关。 刚接触 Arthas,就被它能够 watch 方法的输入参数和返回值的功能震惊到了。这简直太酷炫了,让你可以像本地单步调试一样,跟踪到每一步的执行结果和获取当前的变量数值。以前要定位线上问题,信息不足就需要加日志打印,定位问题,可能需要反复重启应用。用了 Arthas,根本不需要加日志打印,重启应用这些操作。花了大概一个周末下午,在本地跑了下官方 demo,熟悉了下常用操作。脑子里对 Arthas 能够做什么,能解决什么,怎么解决,已经有了大概的了解。后面需要用的时候,就能派上大用场了(学了就一定有 bug 会找上门的=.=)。 下面介绍一个特意找上门的 bug。 背景:同一个聊天交友类产品,对外以一个主品牌以及多个新品牌进行发布。服务端是共用一套数据的,但是所有对外展示的信息,涉及到品牌相关的,需要进行文案替换。在同一个群组里,主品牌和新品牌的用户可以互相聊天。 问题现象: 线上某个群组里面,同一条聊天消息涉及到需要替换文案的内容时

【总】JVM合集(持续更新中。。。)

て烟熏妆下的殇ゞ 提交于 2020-08-18 06:33:25
一、概述 JVM作为java底层基础知识,是重中之重的知识,博主通过本文,将JVM必知必会的知识体系结构呈现出来,方便大家有脉络得进行系统的学习。 二、目录 1. 我的JVM(一):虚拟机基础概念 2. 我的JVM(二):Class文件结构 3. 我的JVM(三):Class文件加载过程和初始化 4. 我的JVM(四):JMM运行时内存结构 5. 我的JVM(五):JVM运行时数据区和JVM指令集 6. 我的JVM(六):GC的基础概念以及GC算法 7. 我的JVM(七):十种垃圾回收器和三色标记法 8. 我的JVM(八):实战调优的场景与常用命令和工具 9. 我的JVM(番外):Arthas - Java 线上问题定位处理的终极利器 三、总结 更多精彩内容,敬请扫描下方二维码,关注我的微信公众号【Java觉浅】,获取第一时间更新哦! 来源: oschina 链接: https://my.oschina.net/qq785482254/blog/4501031

arthas,打印方法参数,打印方法调用栈

混江龙づ霸主 提交于 2020-08-18 05:39:08
启动两个arthas,一个打印方法参数,一个打印方法调用栈,例如跟踪java.io.File的构造函数 打印方法参数 watch java.io.File <init> "{params}" -x 2 -b 'params.length==2 and params[0].class.name=="java.io.File"' 打印方法调用栈 stack java.io.File <init> 'params.length==2 and params[0].class.name=="java.io.File"' 来源: oschina 链接: https://my.oschina.net/u/1263909/blog/4435948

阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了!

蹲街弑〆低调 提交于 2020-08-17 15:29:57
作者 | 汪吉 【Arthas 官方社区正在举行征文活动,参加即有奖品拿~ 点击投稿 】 一、入门步骤 1. 安装 https://arthas.gitee.io/install-detail.html 上述命令会下载启动脚本文件 as.sh 到当前目录: curl -L https://alibaba.github.io/arthas/install.sh | sh or as.sh 启动: curl -sk https://arthas.gitee.io/arthas-boot.jar -o ~/.arthas-boot.jar && echo "alias as.sh='java -jar ~/.arthas-boot.jar --repo-mirror aliyun --use-http'" >> ~/.bashrc && source ~/.bashrc 2. 在线教程体验 https://alibaba.github.io/arthas/arthas-tutorials?language=cn 当然也可以自己本地体验一下~自己通过下载一个 arthas-idea-plugin 的体验 demo 直接本地上手。 https://github.com/WangJi92/arthas-plugin-demo 全局命令说明 -x 是展示结果属性遍历深度,默认为 1 -n

arthas命令watch观察方法调用(上)

不羁的心 提交于 2020-08-16 06:20:46
arthas 是一个 Java 开源诊断神器。 今天分享一个非常重要的命令 watch ,官网定义这个方法的功能如下:让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。 由于涉及到比较多的命令参数和 ognl 表达式的应用,内容比较多,所以分了上下两期,上主要讲官网 Demo 内容,下主要讲实践。顺道说一下,官网的文档标题和实际 Demo 有几处不太一致的地方,大家如果要学习的话,以 Demo 代码展示为主就好。 主要参数 参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 方法名表达式匹配 express 观察表达式 condition-express 条件表达式 [b] 在方法调用之前观察 [e] 在方法异常之后观察 [s] 在方法返回之后观察 [f] 在方法结束之后(正常返回和异常返回)观察 [E] 开启正则表达式匹配,默认为通配符匹配 [x:] 指定输出结果的属性遍历深度,默认为 1 arthas命令watch观察方法调用(上) 点击观看视频 特别说明 watch 命令定义了4个观察事件点,即 -b 方法调用前, -e 方法异常后, -s 方法返回后, -f 方法结束后 4个观察事件点 -b 、 -e 、 -s 默认关闭, -f 默认打开

性能分析之TCP全连接队列占满问题分析及优化过程(转载)

十年热恋 提交于 2020-08-15 01:47:13
前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的。 理解下TCP建立连接过程与队列 从图中明显可以看出建立 TCP 连接的时候,有两个队列: syns queue (半连接队列)和 accept queue (全连接队列),分别在第一次握手和第三次握手。 半连接队列: 保存 SYN_RECV 状态的连接。 控制参数: 半连接队列的大小:min(backlog, 内核参数 net.core.somaxconn,内核参数tcp_max_syn_backlog). net.ipv4.tcp_max_syn_backlog:能接受 SYN 同步包的最大客户端数量,即半连接上限; tcp_syncookies:当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; accept队列-全连接队列: 保存 ESTABLISHED 状态的连接。 控制参数: 全连接队列的大小:min(backlog, /proc/sys/net/core/somaxconn),意思是取backlog 与 somaxconn 两值的最小值, net.core.somaxconn 定义了系统级别的全连接队列最大长度,而 backlog 只是应用层传入的参数,所以 backlog 值尽量小于 net.core

使用Docker构建企业级自定义镜像

﹥>﹥吖頭↗ 提交于 2020-08-14 18:28:34
前言 临下班前,楼主接到了一个需求,由于基础镜像标准发生变更,需要按照最新的Docker 镜像标准构建自己应用的自定义镜像。目前的标准是这样的:基础架构组只提供所有项目必须接入的3个公共镜像,这3个公共基础镜像包含了:JDK8、Skywalking、Arthas。对于各自业务组的应用如果还需要加入其它镜像,则由各个业务组自己基于基础架构组提供的公共镜像之上,再添加自定义的镜像,结构图如下: 构建步骤 编写Dockerfile 基于最新的规范来看,我们需要编写一个Dockerfile,然后引用基础架构组提供的基础镜像,再加入应用需要的其他镜像。因此最终的 Dockerfile 文件如下: FROM 基础镜像地址 RUN apk add 需要添加的自定义镜像 ... 在Centos7下安装Docker环境 卸载旧版本 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。 $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 安装 Docker Engine