第一章JVM概述
1.为什么调优JVM
2.调优概述
3.性能优化步骤
1.性能监控
2.性能分析
3.性能调优
减少Full GC的频率,以较小的内存改善应用程序的响应性、吞吐量和延迟性;
4.性能指标
并发数:
三者关系
并发数影响吞吐量和响应时间;
当适合时,吞吐量最大,响应时间较快;
当并发数达到极限时,堵车,响应时间和吞吐量都会减少;
第二章:JVM诊断工具-命令行
1.JPS查看正在运行的Java进程
2.JPS [options] [hostid]
jps -m > a.txt
-m是外部传递给主方法main的参数
jps -v 传递给虚拟机的参数
关闭UsePerfData参数就无法查看到进行信息
hostid参数
2.jstat查看JVM的统计信息
基本语法
interval:时间间隔;
count:查询次数;
-t:程序运行时间;
-h:查询标题信息;
应用1:使用-t参数,监测GC时间,得出GC与程序运行时间
计算垃圾回收的时间与程序运行的时间进行分析
应用2:判断OOM异常
从老年代中抽样出一组数据中最小的占用比例;若一直上升则有肯能OOM;
3.jinfo实时查看和修改JVM配置参数
扩展:查看JVM修改和默认参数
4.jmap导出内存映像文件&内存使用情况
4.1 导出dump文件
例子:手动导出dump文件
jmap -dump:format=b,file=d:\1.hprof 进程ID
格式为b,是把dump文件和hprof文件映射起来;
jmap -dump:live,format=b,file=d:\1.hprof 进程ID
live只打印存活的对象;
手动导出和自动导出
自动导出可以在OOM时导出Dump文件;
自动导出:
4.2 显示堆内存相关信息
jmsp -heap pid
jmap在此时这个时间点上的堆使用情况;
GUI Visual > jstat > jmap
jmap -histo pid
小结
注意:
若设置live选项在两个安全点之间,那么无法探知这些对象
若长时间无法跑到安全点,则jmap将一直等下去;与jstat则不同
5.jhat堆分析工具
注意:一般不会在生产环境的服务器上使用jhat
5.1基本语法
6.jstack打印JVM线程快照
6.1 基本情况
6.2 具体语法
例子1:两个线程死锁问题
线程1,先申请s1,再申请s2;
线程2,先申请s2,再申请s1;
同时在每个线程申请资源期间sleep等待一段时间;
使用jstack查看进程:
发现两个线程的状态为BLOCKED
分析后的原因,及相关代码块;
例子2:同步问题
同步代码块
线程1:BLOCKED
线程2:TIMED_WAITING
6.3基本参数
加上-l显示除堆栈外,锁的附加信息
代码中打印线程信息
7.jcmd多功能的命令行
7.1 基本使用
jcmd可以替换jmap
7.2 基本语法
7.3 jcmd pid 具体命令
8.jstatd远程主机信息收集