从GC、线程角度分析中间件性能 - ashorefish/-software-test GitHub Wiki

线上经常需要对中间件的性能进行巡检,除了中间件本身的自带监控以外。很多的java 中间件没有提供监控,或者生产环境不允许操作(比如TOMCAT)

针对中间件本身可以从GC、线程的角度分析出java虚拟机的运行情况

巡检指标:GC日志、线程dump

巡检工具:Gceasy、FastThread、PMTI、jstack、jstat、jmap 等

巡检命令:

GC 运行情况:jstat -gcutil pid 1000 20 (线上jstat 需要中间件运行的jdk,还有一些情况可能会有报错,按照提示加上-d64 、-F即可)

堆内存配置情况:jmap-heap pid 查看堆内存配置情况

内存dump:jmap -dump:format=b,file=test.log pid 文件比较大,用 IBM MemoryAnalyzer工具分析即可,建议8G内存以上的机器配置

线程运行情况:jstack-pid 输出到文本,用线程分析工具分析线程即可

占用cpu较高的线程dump 分析:

ps -mp pid -o THREAD,tid,time printf "%x\n" tid jstack pid | grep tid -A 30

专业分析GC日志、线程dump 网站:

GC 日志 :http://gceasy.io/ (上传GC日志即可分析)

线程dump:http://fastthread.io/(上传线程dump 文件即可分析)

专业分析工具:

内存dump 分析:IBM MemoryAnalyzer (MemoryAnalyzer-1.6.1.20161125-win32.win32.x86_64.zip)

线程分析:IBM jca 分析工具 (jca433.jar)

GC日志:IBM PMTI 工具 (ga456.jar)

附jinfo 可以在线开启 jvm参数,开启GC日志等参数,可以了解学习下 https://blog.csdn.net/chuchus/article/details/53435828