1、目的
使用较小的内存占用来获得较高的吞吐量或者较低的延迟。
程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行效率。
这里有几个比较重要的指标:
- 内存占用:程序正常运行需要的内存大小。
- 延迟:由于垃圾收集而引起的程序停顿时间。
- 吞吐量:用户程序运行时间占用户程序和垃圾收集占用总时间的比值
2、怎么用
打开idea,点击Edit Configuration
点击Modify options会弹出一个页面,选择Add Vm options,会出现下面的页面
在下面画红线的地方设置自己需要的参数
3、Jvm调优常用参数
参数 | 说明 | 实例 |
---|
-Xms | 初始堆大小,默认物理内存的1/64 | -Xms512M | -Xmx | 最大堆大小,默认物理内存的1/4 | -Xms2G | -Xmn | 新生代内存大小,官方推荐为整个堆的3/8 | -Xmn512M | -Xss | 线程堆栈大小,jdk1.5及之后默认1M,之前默认256k | -Xss512k | -XX:NewRatio=n | 设置新生代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 | -XX:NewRatio=3 | -XX:SurvivorRatio=n | 年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:8,表示Eden:Survivor=8:1:1,一个Survivor区占整个年轻代的1/8 | -XX:SurvivorRatio=8 | -XX:PermSize=n | 永久代初始值,默认为物理内存的1/64 | -XX:PermSize=128M | -XX:MaxPermSize=n | 永久代最大值,默认为物理内存的1/4 | -XX:MaxPermSize=256M | -verbose:class | 在控制台打印类加载信息 | | -verbose:gc | 在控制台打印垃圾回收日志 | | -XX:+PrintGC | 打印GC日志,内容简单 | | -XX:+PrintGCDetails | 打印GC日志,内容详细 | | -XX:+PrintGCDateStamps | 在GC日志中添加时间戳 | | -Xloggc:filename | 指定gc日志路径 | -Xloggc:/data/jvm/gc.log | -XX:+UseSerialGC | 年轻代设置串行收集器Serial | | -XX:+UseParallelGC | 年轻代设置并行收集器Parallel Scavenge | | -XX:ParallelGCThreads=n | 设置Parallel Scavenge收集时使用的CPU数。并行收集线程数。 | -XX:ParallelGCThreads=4 | -XX:MaxGCPauseMillis=n | 设置Parallel Scavenge回收的最大时间(毫秒) | -XX:MaxGCPauseMillis=100 | -XX:GCTimeRatio=n | 设置Parallel Scavenge垃圾回收时间占程序运行时间的百分比。公式为1/(1+n) | -XX:GCTimeRatio=19 | -XX:+UseParallelOldGC | 设置老年代为并行收集器ParallelOld收集器 | | -XX:+UseConcMarkSweepGC | 设置老年代并发收集器CMS | | -XX:+CMSIncrementalMode | 设置CMS收集器为增量模式,适用于单CPU情况。 | |
|