概述
性能优化的步骤
-
性能监控:就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题
- GC频繁
- CPU过载过高
- OOM
- 内存泄漏
- 死锁
- 程序响应时间较长
- 性能分析:通常在系统测试环境或者开发环境进行分析
- 通过查看程序日志以及GC日志,或者运用命令行工具如jstack、jmap、jinfo等
- 导出dump快照文件,利用内存分析工具分析文件
- 使用阿里的arthas或者jprofiler、jconsole、jvisualvm等查看jvm状态
- 性能优化:目的就是改善应用程序的响应时间或者吞吐量
- 更改程序参数、
- 源代码
- 属性配置
注意: 为何要调优?防止出现OOM以及解决OOM和减少FGC出现的次数
JVM命令行监控工具 (适用于无GUI环境下的服务器环境且已安装完整JDK的条件下使用)
- jps: java process status 表示查看正在运行的java进程
- -l: 输出应用程序主类的全类名
- jstat: 查看JVM统计信息,包括虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
- -class: classLoader相关信息
- -gc: 显示与GC相关信息
- jinfo: 实时查看和修改jvm的配置参数信息
- jmap: 导出内存映像文件即JVM堆快照dump文件
- -dump:file=C:/tmp/dump.hprof 4040 --表示将java进程ID(4040)的堆快照文件导出到C:/tmp/dump.hprof(常常结合jps使用)
- jhat: jdk自带堆分析工具(jdk9以后已删除该命令,官方建议使用visualVM代替)
- jstack: 打印jvm中线程快照(即每条线程正在执行的方法的堆栈集合),常常用于定位线程出现长时间停顿的原因,如死锁、死循环、请求外部资源导致长时间等待
- 在thread dump中,重点关注如下几种状态
- 死锁: Deadlock
- 等待资源: Waiting on condition
- 等待获取监视器: Waiting on monitor entry
- 阻塞: Blocked
JVM监控及诊断的GUI工具
visual VM(jdk自带产品)
Jprofiler(商业收费,功能全面)
Arthas(目前市场上比较流行,可以集成到项目中,在系统运行过程中动态查看内存等相关状态)
注意:
a.从官网下载arthas后确保本地jdk已安装成功;
b.系统正常运行后,启动arthas进行诊断监测项目。(选择项目pid进行后续诊断)
阿里的开源产品组件,官网:简介 | arthas