Arthas调优实战
Arthas
-
Arthas使用场景
- 是否有一个全局视角来查看系统的运行状况?
- 为什么 CPU 又升高了,到底是哪里占用了 CPU ?
- 运行的多线程有死锁吗?有阻塞吗?
- 程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 有什么办法可以监控到 JVM 的实时运行状态?
-
Arthas常用指令
-
dashboard: 查看当前JVM内存使用信息
-
thread
- thread : 查看某个线程
- thread -b: 查看线程死锁
-
jad: 反编译代码,这样可以方便我们查看线上代码是否是正确的版本
-
help: 查看手册
-
ognl: 查看或修改线上变量的值
-
heapdump: 类似jmap,可以查看对象占用内存情况
-
如何分析GC日志
-
运行程序加上对应的GC日志,但线上服务器运行时间较长,可以滚动打印
以下参数: 分10个文件打印,每个文件大小100M,超过即覆盖
-Xloggc:./gc-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -
注意: JVM内存的设计机制有些是会自动扩容 ,我们尽量将参数的最大值和初始值设置一样,比如内存扩容/缩容就比较耗费性能-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M