JVM调优总结(含tomcat调优配置)

来源:互联网 发布:js隐式类型转换 编辑:程序博客网 时间:2024/06/06 21:55
JVM参数
    -     标准参数(所有jvm都支持)
    -X  非标准参数(不同jvm不同)
-    XX 不稳定参数(下一版本可能取消)

JVM中的垃圾收集器

    Serial Collector单线程串行执行GC(效率高,但吞吐量小)
    Parallel Collector多线程并行GC(默认,效率高,吞吐量大,单处理器效率可能低,停顿时间长

    Concurrent Mark Sweep并发GC,和应用线程同时执行(将内存分块,每个线程分块GC,标记清除,停顿时间短
    G1并发GC(停顿短、并发大)

java对象分配
    栈上分配(JVM默认开启栈上优化)
        线程私有、小对象(方法结束栈清空不需要垃圾收集)
        无逃逸(方法结束,对象消失。如果仍然有其它对象持有它的引用,说明逃逸了(作用域逃出了方法))
    线程本地分配(分配在每个线程的工作内存,在eden区分配,但属于自己线程的专属空间)
        占用eden 1%
        自己线程所有,不用竞争加锁(分配速度快)
        小对象
1
-XX:+UseTLAB
    老年代分配(堆)
        大对象

    新生代eden分配(堆)
        普通对象

常用参数
OOM异常的调优处理
1
/**
2
 * 内存溢出调优处理:开启Dump文件的方式,将异常信息保存在文件里,用Virtual VM导入查看
3
 * -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:\tmp\jvm.dump -XX:+PrintGCDetails
4
 * -Xms10M -Xmx10M
5
 */
6
public class OOMTest {
7
    public static void main(String[] args){
8
        List<Object> list = new ArrayList<>();
9
        for (int i=0;i<10000000;i++) list.add(new byte[1024*1024]);
10
    }
11
}
12
··OOM异常后得到dump文件
··打开Virtual VM导入dump文件,发现byte[]数组占用了90.8%的堆空间,因此可以定位到相应代码进行修改
 
tomcat优化配置
配置文件:apache\apache-tomcat-7.0.73\bin\catalina.bat

1
set JAVA_OPTS= 
2
    -Xms4g   //服务器只运行一个tomcat一个jvm虚拟机尽可能设置和机器内存相近
3
    -Xmx4g
4
    -Xss512k
5
    -XX:+AggressiveOpts //凡是能优化的功能都打开(重要!)
6
    -XX:+UseBiasedLocking  //开启偏向锁,锁优化(经常用)
7
    -XX:PermSize=64M  //初始永久区大小,刚开启虚拟机时类加载较多,容易卡死,可以适当调大(JDK8取消)
8
    -XX:MaxPermSize=64M  //最大永久区大小
9
    -XX:+DisableExplicitGC  //禁止显式调用GC(禁用System.GC(),防止打乱调优计划)
10
    
11
    -XX:+UseConcMarkSweepGC  //使用CMS收集器
12
    -XX:+UseParNewGC  //使用并行收集器收集新生代
13
    -XX:+CMSParallelRemarkEnabled  //减少mark标记时间
14
    -XX:+UserCMSCompactAtFullCollection  //并发收集时压缩老年代
15
    -XX:LargePageSizeInBytes=128m  //内存分页大小
16
    -XX:+UseFastAccessorMethods   //get/set方法转成本地代码

 
原创粉丝点击