一.概述
1.JVM调优参考量
吞吐量:指系统在单位时间内处理请求的数量。对于并发系统,通常需要用吞吐量作为性能指标。
响应时间:指系统对请求作出响应的时间。对于单用户的系统,响应时间可以很好地度量系统的性能。
2.JVM调优
调优方向:系统运行慢、卡顿、OOM、死锁等
JVM内存分区:
JVM垃圾回收触发机制:
Jstat命令:
可以通过== pid 间隔时间 执行次数 ==查看JVM GC情况
二.调优
1.内存溢出OOM
排查步骤:
Jmap命令
首先我们可以通过top命令查看我们服务器java相关的进程对内存和CPU的使用情况,找到内存使用最高的java进程,通过Jmap -dump 命令可以导出dump文件,结合java自带的jvisualvm工具分析dump文件,查看各个类的使用情况,当然还有其他的分析工具,比如阿里的arthas等;
也可以通过配置JVM,在我们程序OOM时,自动导出dump文件到指定位置
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./ (路径)
2.死锁
产生死锁的必要条件:
1.互斥条件
2.不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只 能是主动释放)
3.请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻 塞,但对自己已获得的资源保持不放。
4.循环等待条件
jstack命令
jstack pid可以查看JVM线程的情况,以及死锁
可以看到通过jstack pid 命令JVM已经帮我找到一处死锁,并定位到了具体的代码,同样,还可以用jvisualvm自动检测死锁。找到了死锁的具体位置。