为什么会突然看起这个
最近想自己写一个服务端诊断程序,主要感觉好多东西记不住,记了又忘,把知识转化为程序积累起来
简单的设想是 分两块
- System(CPU、netword(带宽使用率)、I/O、Swap、memory、df 等等)
- 应用/实例(Java/Node/GoLang)Tomcat/WebApp/JVM/misroservice/jar/方法耗时/等等)
然而这块知识匮乏,无从下手~在某某全球最大的同人网站上
搜索了一下关键字 “moniter/诊断程序" 发现一些比较好的项目:如下
Bistoury 是去哪儿网的 java 应用生产问题诊断工具,提供了一站式的问题诊断方案
java 生产环境内存调优(包括 jvm 参数类型,JVM 的参数类型 jinfo & jps(参数和进程查看) jstat(类加载、垃圾收集、JIT 编译) jmap+MAT(内存溢出) jstack(线程、死循环、死锁) JVisualVM(本地和远程可视化监控) 使用 BTrace 进行拦截调试 Tomcat 性能监控与调优 Nginx 性能监控与调优 JVM 层 GC 调优 JAVA 代码层调优
btrace
JavaMelody : monitoring of JavaEE applications
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 打开页面,应该可以方便远程调试
尝试功能
- dashboard 当前进程的情况(貌似隔上几 s 就打印一次)
通过 thread 命令来获取 进程的 main class
jar 反编译 class 看一下我那堆贼 low 的代码
watch 看一下 函数返回值;没写函数(这个应该问题也不大)
包路径.类名 # 函数
5.jvm 信息
6.thread 信息
7.类方法
8.当前应用 cpu 火焰图采样
查看
9.执行异步任务(同时干多个事情)
- 任意命令 后加
&
转后台执行
- jobs 查看再执行的命令(任务)
-
>
输出结果到制定文件
- fg [jobid] 转前台
- bg [jobid] 转后台
还有很多,官方文档写的很详细~(好吧,仓促吧啦吧啦介绍完后,还需要实操去体会),有兴趣的小伙伴可以花时间体会一下