Jvm调优

Posted by Solace Blog on March 19, 2019

JVM调优

主要调整两块:堆内存参数的调整、垃圾回收器的调整

JVM参数

  • -:标准参数,所有JVM都支持
  • -X:非标准参数,每个JVM实现都不同
  • -XX:不稳定参数,下一个版本可能会取消

内存溢出问题定位

-XX:HeapDumpOnOutOfMemoryError:把堆内存信息dump出来

-XX:HeapDumpPath=*** :demp到哪个文件里面

-XX:+PrintGCDetails:打印GC信息

配置上面的参数后,会将堆信息domp到指定文件,通过各种文件来打开dump文件来分析内存信息,JDK提供了自带的Jvisualvm来分析。也可以使用其他软件打开

public static void main(String[] args) {
   List<Object> lists = new ArrayList<>();

   for(int i = 0; i < 1000000000; i++) {
      lists.add(new byte[1024 * 1024]);
   }
}

-Xss128k :栈内存大小;栈越小,线程并发数量会特别多;栈越大,线程递归调用会特别深

常用参数设置

Tomcat调优

set JAVA_OPTS=

-Xms4g:程序堆内存起始4g

-Xmx4g:程序最大堆内存4g

-Xss512k:栈内存512k

-XX:+AggressiveOpts:使用所有的优化型的配置

-XX:+UseBiasedLocking:启用偏执锁

-XX:PermSize=64M:永久区64M

-XX:MaxPermSize=300M:永久区最大300M

-XX:+DisableExplicitGC:禁止显式调用GC // 禁用System.gc();

性能测试工具

Apache开源工具JMeter,测试对于tomcat的优化

总结

Oracle官网JVM文档

对于业务不同情况,对新生代和老年代的比例进行调节,

根据业务实际情况,实用不同的GC,有响应快的,低停顿

对于GC的配置,配置对于内存压缩、并行收集新生代等配置