JVM调优
2017-02-08 18:43:21 0 举报
AI智能生成
JVM调优是指对Java虚拟机进行性能优化,以提高应用程序的运行速度和效率。JVM调优主要包括内存管理、垃圾回收、类加载等方面。内存管理是JVM调优中最重要的部分之一,它包括堆内存和非堆内存的管理。堆内存主要用于存储对象实例,而非堆内存则用于存储类信息、常量、静态变量等。垃圾回收是JVM自动管理内存的过程,它通过回收不再使用的对象来释放内存空间。类加载是指在运行时将类的字节码文件加载到JVM中并创建对应的Class对象。JVM调优需要根据具体的应用场景和需求来进行,一般可以通过调整堆内存大小、选择合适的垃圾回收算法、减少类加载等方式来实现。
作者其他创作
大纲/内容
如何配置
查看配置(ps -ef|grep tomcat)
标准参数(-) 输入java -help 或者java -?查看
非标准参数(-X) 输入java -X查看
-Xmn(新生代内存最大值,与-XX:NewSize,-XX:MaxNewSize等价)
-Xms(初始堆的最小值) 以websites启动参数为例讲解现有以及调小后的现象
-Xmx(初始化堆的最大值)
非稳定参数(-XX)
性能参数
--XX:NewSize --XX:MaxNewSize
-XX:MaxPermSize (永久区、非堆区最大值) --XX:PermSize
-XX:NewRatio(新生代与老年代的比例)
-XX:SurvivorRatio(Eden区和suvivor区的比例)
行为参数,(垃圾收集器组合、gc策略)
-XX:-UseSerialGC (串行gc,使用Serial+Serial Old)
-XX:-UseParallelGC(并行gc,使用Parallel Scavenge+Serial Old,server模式下默认规则)
-XX:+UseParNewGC(ParNew+Serial Old)
-XX:+UseConcMarkSweepGC(ParNew+CMS+Serial Old组合并发收集,在server模式下,此模式优先于-XX:+UseParNewGc模式)
-XX:+UseParallelOldGc(使用Parallel Scavenge + parallel old组合)
所有垃圾收集器
新生代回收器
serial(单线程串行回收器,会停止其他工作线程。client启动方式默认会使用此方式)
parNew(多线程并行回收器,使用停止复制算法,会停止其他工作线程)
Parallel Scavenge(关注cpu吞吐量,也就是运行用户代码时间/总时间,适用于后台计算数据。在数据处理及计算式用此模式)
老年代回收器
cms(多线程并发回收器,使用标记清除算法,不会停止其他工作线程。缩短垃圾回收停顿时间,对用户体验较好。B/S架构使用)
serial old收集器(单线程回收,会停止其他工作线程)
parallel old(多线程并行回收器,会停止其他工作线程,)
调试参数
-XX:HeapDumpPath=./java_pid<pid>.hprof(指定导出堆信息时的路径或文件名)
-XX:-HeapDumpOnOutOfMemoryError(当首次遭遇OOM时导出此时堆中相关信息)
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>"(当首次遭遇OOM时 执行命令,如发送邮件等)
子主题
如何监控
jps命令(jps -v)
jstat(jstat -<option> vmid interval count,如:jstat -gcutil 26142 2000 2000)
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
top -Hp pid
printf "%x\n" tid
jstack pid|grep tid 16进制
jinfo vmid
jmap vmid (jmap -dump:file=./ad.prof 26142导出dump, jmap -histo:live 26142|more 查看对象)
jmap -J-d64 -heap pid
jhat -J-Xmx512m jmap.prof
如何调优
子主题
子主题
子主题
0 条评论
下一页