线上经常需要对中间件的性能进行巡检,除了中间件本身的自带监控以外。很多的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日志等参数,可以了解学习下