BTrace

线上应用调试利器 --Arthas

淺唱寂寞╮ 提交于 2021-02-15 04:02:05
  在之前的文章中,我介绍了使用 Btrace 工具进行线上代码的debug ( https://www.cnblogs.com/yougewe/p/10180483.html ),其大致原理就是通过字节码注入的方式进行辅助排查。   可以说,btrace 已经给我们的开发调试一带来了许多的方便,我们在上面做任何想要的调试!但是,明显, btrace 的使用还是有一定成本的,比如:安装应用,写调试脚本...   所以,今天我们再来看一大利器: arthas (阿尔萨斯) arthas 官网地址: https://alibaba.github.io/arthas/   arthas 的文档真的写得非常棒,可以说一看就会。 但是我还是想写一下一些自己的文档,毕竟我们往往只会用到其中皮毛功能而已。翻阅其所有文档也还是有点浪费了! 一、为什么要用 Arthas ?   其实,这个问题在前面已回答,而且,你为什么要用 btrace ? 同理! 具体理由如下: 可以很方便查到一类是从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 怀疑自己的代码未被部署到服务器,可以通过命令快速验证服务器上的代码就是本地的代码; 可以直接通过 arthas 进行线上debug, 查看方法返回值以确认问题所在; 可以很方便嵌入自己的debug代码,快速验证猜想; 操作完成后

系统设计的几点思考

帅比萌擦擦* 提交于 2021-02-10 09:33:16
首发于个人公众号《andyqian》,期待你的关注! 前言 又有好一阵子没有更新文章了,今天聊聊系统设计的几点思考。对于我们来说,始终会独自设计,研发,迭代系统。为系统的演进,整个生命周期负责。而负责的系统到底处于什么状态?是否健康?是否出现问题?这些都是需要考虑的问题。 开关 对关键流程,进行开关设置。例如:交易开关,资金池开关。对于金融系统而言,特别是出金端,要做好严格的把控。其目的主要是:兜底,及时止损。例如系统出现漏洞,安全事件时,能够及时将其关闭,停止交易。 对于 TO B 应用而言,则可以定制化开关。如关闭某个企业的出金,交易等。避免系统雪崩,其目的是将系统的影响降到最低。总之可以根据系统的特征,识别系统的关键点,对其进行开关的设置。 监控 业务监控 (在一定时间內,业务处理数是否达标。) 低于阀值时进行业务报警。 数据监控,对主流程的关键数据进行监控。例如:每日的交易数,交易额,成功笔数,失败笔数,以及进行 Top 10 的失败原因进行分析。 报警方式 : 微信报警 邮件报警 短信报警 运营数据可视化 对于系统中的关键数据,进行可视化展示,并与上一周期进行比较。从而可以通过数据的差异发现问题,从而及时解决问题。例如: 每日的交易数,交易额,成功率,失败率,与前一日进行比较,前三日,前一周等等进行比较。 通过图表的形式,展示每日的注册数,活跃数 等关键数据

阿里毕玄:程序员如何提升自己的硬实力

人走茶凉 提交于 2021-02-01 11:07:47
从业余程序员到职业程序员 程序员刚入行时,我觉得最重要的是把自己培养成职业的程序员。 我的程序员起步比同龄人都晚了很多,更不用说现在的年轻人了。我大学读的是生物专业,在上大学前基本算是完全没接触过计算机。军训的时候因为很无聊,我和室友每天跑去学校的机房玩,我现在还印象很深刻,我第一次走进机房的时候,别人问,你是要玩windows,还是dos,我那是完全的一抹黑。后来就只记得在机房一堆人都是在练习盲打,军训完,盲打倒是练的差不多了,对计算机就这么产生了浓厚的兴趣,大一的时候都是玩组装机,捣鼓了一些,对计算机的硬件有了那么一些了解。 到大二后,买了一些书开始学习当时最火的网页三剑客,学会了手写HTML、PS的基本玩法之类的,课余、暑假也能开始给人做做网站什么的(那个时候做网站真的好赚钱),可能那样过了个一年左右,做静态的网页就不好赚钱了,也不好找实习工作,于是就开始学asp,写些简单的CRUD,做做留言板、论坛这些动态程序,应该算是在这个阶段接触编程了。 毕业后加入了深圳的一家做政府行业软件的公司,一个非常靠谱和给我空间的Leader,使得自己在那几年有了不错的成长,终于成了一个职业的程序员。 通常来说,业余或半职业的程序员,多数是1个人,或者很小的一个团队一起开发,使得在开发流程、协作工具(例如jira、cvs/svn/git等)、测试上通常会有很大的欠缺

利用Arthas定位线上问题实例

*爱你&永不变心* 提交于 2021-01-20 07:26:31
前言 Arthas是一个类似于Btrace的JVM在线调试分析工具,具体可参考我之前写的一篇博客: 利用JVM在线调试工具排查线上问题 。本文分享笔者刚遇到的一个问题,虽然不复杂,但是很典型。 问题与分析过程 昨天上线遇到一个问题,交易后给大数据平台异步送数,但是他们说没收到数据,因为我们没有打日志,所以没有直接的证据证明是他们的问题而不是我们的问题。 送数的原理大致如下,就是交易主线程把数据放到队列里,然后异步线程从队列里把数据取出来,发送到后台。 队列: BlockingQueue<Message> queue = new BlockingQueue(); 同步线程: void sendMsg(Message msg) { queue.offer(msg); } 异步线程: void consume() { Message msg = queue.take(); while(msg != null) { HttpClient.post(msg); msg = queue.take(); } } 具体送数的代码如下( 加了行数): 38 public void consume(Map msg) { 39 HttpClient httpClient = new HttpClient(cm); 40 PostMethod method = new PostMethod(uri);

抓取腾讯视频MP4文件

女生的网名这么多〃 提交于 2020-12-29 05:17:38
1. 获取视频播放页地址,如:https://v.qq.com/x/page/g0921owmtc0.html 2. 视频正片开播后,在H5播放器的右键菜单中选择“复制调试信息”。 注意,一定要是H5播放器!不是Flash播放器! 复制出来的信息如下: {"pid":"dac552a0ecf204cded02a7aca790645f","url":"https%3A%2F%2Fv.qq.com%2Fx%2Fpage%2Fg0921owmtc0.html","vid":"g0921owmtc0","version":"3.5.57","platform":"10201","playtype":1,"emsg2":"%7B%22flow%22%3A%5B%221577759284764%20getinfo%20ok%20603%22%5D%7D","id":"","action":"//btrace.qq.com/kvcollect?BossId=4372&Pwd=967411786","getinfo":"%2F%2Fvd.l.qq.com%2Fproxyhttp%2Fvinfoad%26charge%3D0%26defaultfmt%3Dauto%26otype%3Dojson%26guid%3D98d3c0469a9101f5abc5aa6b5dded4b4%26flowid

《深入理解JVM.2nd》笔记(四):虚拟机性能监控与故障处理工具

孤街浪徒 提交于 2020-08-15 16:33:22
概述 给一个系统定位问题的时候, 知识、经验 是关键基础, 数据 是依据, 工具 是运用知识处理数据的手段。这里说的 数据 包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(headdump/hprof文件)等。 经常使用适当的虚拟机监控和分析工具可以加快分析数据、定位解决问题的速度,但在学习工具前,也应当意识到 工具永远都是知识技能的一层包装 。 JDK的命令行工具 这些工具比较小巧,只因这些命令行工具大多数是JDK/lib/tools.jar类库的一层薄包装而已 JDK开发团队选择采用Java代码来实现这些监控工具是有特别用意的 :当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程Telnet到服务器上都可能会受到限制。借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能。 下表是Sun JDK监控和故障处理工具 名称 主要作用 jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 jstat JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 jinfo Configuration Info for Java,显示虚拟机配置信息 jmap Memory Map for

Java应用调试利器——BTrace

爱⌒轻易说出口 提交于 2020-08-15 16:28:24
Java应用调试利器——BTrace教程 - zengkefu - 博客园 https://www.cnblogs.com/zengkefu/p/5720854.html Java BTrace实战(1)--BTrace的入门和使用 - mumuxinfei - 博客园 https://www.cnblogs.com/mumuxinfei/p/3944823.html 来源: oschina 链接: https://my.oschina.net/u/4308002/blog/4300033

一份详尽的 Java 问题排查工具清单,值得收藏!

微笑、不失礼 提交于 2020-08-12 20:59:45
作者:红魔七号 https://yq.aliyun.com/articles/69520 前言 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮助很大的工具,大家一起进步。 闲话不多说,开搞。 Linux命令类 tail 最常用的tail -f tail -300f shopbase.log #倒数300行并进入实时监听文件写入模式 grep grep forest f.txt #文件查找 grep forest f.txt cpf.txt #多文件查找 grep 'log' /home/admin -r -n #目录下查找所有符合关键字的文件 cat f.txt | grep -i shopbase grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件后缀 grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配 seq 10 | grep 5 -A 3 #上匹配 seq 10 | grep 5 -B 3 #下匹配 seq 10 | grep 5 -C 3 #上下匹配,平时用这个就妥了 cat f

Java Agent(上)

无人久伴 提交于 2020-08-12 01:57:33
1、java agent是什么? ---》对用户透明,不侵入用户业务代码。让java虚拟机加载agent jar 2、java agent有什么用? --->应用场景例如:调用链追踪项目,在用户无感知的情况下,记录日志。目前业内使用该技术的有,SkyWalking,Pinpoint(这个监控的粒度更小) -各个 Java IDE 的调试功能,例如 eclipse、IntelliJ ; -热部署功能,例如 JRebel、XRebel、 spring-loaded; -各种线上诊断工具,例如 Btrace、Greys,还有阿里的 Arthas; -各种性能分析工具,例如 Visual VM、JConsole 等 3、java agent的实现原理? https://zhuanlan.zhihu.com/p/147375268 4、 入门案例 4.1、 如何制造自己第一个java agent jar包 4.1.1、 第一步:我们需要一个插件来帮助我们生成带特定格式的MAINIFEST.MF的jar 4.1.2、 第二步:在启动项目的时候,在jvm参数中添加 -javaagent: *\ving-agent-0.0.1-SNAPSHOT.jar (在jvm上先加载agent包) (偷偷地问)特定格式的MAINIFEST.MF是怎样的?需要包括下面的内容 Manifest-Version:

Java Agent入门

喜你入骨 提交于 2020-08-05 12:33:09
介绍 在JDK1.5以后,我们可以使用agent技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。Agent分为两种,一种是在主程序之前运行的Agent,一种是在主程序之后运行的Agent(前者的升级版,1.6以后提供)。 使用 主程序运行之前的代理程序 创建代理类 public class MyPreMainAgent { //方法名和参数都是固定的 premain表示在主程序运行之前运行 public static void premain(String agentArgs, Instrumentation inst) { System.out.println("PreMain start"); System.out.println(agentArgs); System.out.println(inst); } } Instrumentation是java1.5新提供的类,它提供在运行时重新加载某个类的的class文件的api。 public interface Instrumentation { /** * 添加一个转换器Transformer,之后的所有的类加载都会被Transformer拦截。 * ClassFileTransformer类是一个接口,使用时需要实现它