为什么会突然看起这个

最近想自己写一个服务端诊断程序,主要感觉好多东西记不住,记了又忘,把知识转化为程序积累起来
简单的设想是 分两块

  1. System(CPU、netword(带宽使用率)、I/O、Swap、memory、df 等等)
  2. 应用/实例(Java/Node/GoLang)Tomcat/WebApp/JVM/misroservice/jar/方法耗时/等等)

然而这块知识匮乏,无从下手~在某某全球最大的同人网站上😁 😁 搜索了一下关键字 “moniter/诊断程序" 发现一些比较好的项目:如下

  1. Bistoury 是去哪儿网的 java 应用生产问题诊断工具,提供了一站式的问题诊断方案

  2. java 生产环境内存调优(包括 jvm 参数类型,JVM 的参数类型 jinfo & jps(参数和进程查看) jstat(类加载、垃圾收集、JIT 编译) jmap+MAT(内存溢出) jstack(线程、死循环、死锁) JVisualVM(本地和远程可视化监控) 使用 BTrace 进行拦截调试 Tomcat 性能监控与调优 Nginx 性能监控与调优 JVM 层 GC 调优 JAVA 代码层调优

  3. btrace

  4. JavaMelody : monitoring of JavaEE applications

  5. Alibaba Java Diagnostic Tool Arthas/Alibaba Java 诊断利器 Arthas ali 爸爸的

arthas 中文名- 阿尔萨斯 🙄 👍 洋气

arthas 使用文档 - 写的非常详细
有配套 IDE 的插件
Cloud Toolkit
官方截图:

看到这里感觉有必要花点时间学习一下:
安装完插件

官方文档地毯式操作

curl -O https://arthas.gitee.io/arthas-boot.jar
java -jar arthas-boot.jar --repo-mirror aliyun --use-http

简单写了一个特 low 的 main 方法,运行自己的程序

输入【4 回车】Attach 完,漂亮的 logo
可以在本地访问 127.0.0.1:3658 打开页面,应该可以方便远程调试

尝试功能

  1. dashboard 当前进程的情况(貌似隔上几 s 就打印一次)
  2. 通过 thread 命令来获取 进程的 main class

  3. jar 反编译 class 看一下我那堆贼 low 的代码

  4. watch 看一下 函数返回值;没写函数(这个应该问题也不大)
    包路径.类名 # 函数

5.jvm 信息

6.thread 信息

7.类方法

8.当前应用 cpu 火焰图采样

查看

9.执行异步任务(同时干多个事情)

  1. 任意命令 后加 &转后台执行
  2. jobs 查看再执行的命令(任务)
  3. >输出结果到制定文件
  4. fg [jobid] 转前台
  5. bg [jobid] 转后台

还有很多,官方文档写的很详细~(好吧,仓促吧啦吧啦介绍完后,还需要实操去体会),有兴趣的小伙伴可以花时间体会一下


↙↙↙阅读原文可查看相关链接,并与作者交流