zoukankan      html  css  js  c++  java
  • 2019.9.25 Tomcat JVM参数优化

     

    JVM参数的优化                 JVM 是java虚拟机,是jdk最底层的东西

    适当调整tomcat的运行jvm参数可以提升整体性能,和内存使用率。

    JVM内存模型

    Java

    Java栈与每一个线程关联的,jvm在创建每个线程的时候,会分配一定的栈空间给线程使用,它主要用来存储线程执行过程中的局部变量,和方法的返回值,以及方法调用上下文,栈空间随着线程的终止而释放。

    Java

    Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种java对象,比如数组,线程对象等。

    Java堆的分区

    Young新生代

    新生成的对象都是放在新生代的。新生代的目标就是尽可能快速的回收掉那些生命周期短的对象

      新生代分为三个区:一个Eden区,两个Survivor区(一般情况)。大部分对象是在Eden区中生成,某一个时刻只有其中一个是被使用的,当Eden区满了,GC就会将存活的对象移到空闲的survivor区间中,根据jvm的策略。在经过几次垃圾收集后,任然存活于survivor的对象将被移动到oid generation区间。

    (新生成的对象都在新生代,java的GC会进行垃圾回收你这个对象,但是它发现你这个内存对象还在应用,根据几次的垃圾回收,任然还有些对象没有被回收的话就给他放到老年代里,放到老年代里不一定不会被GC回收)。

    Oid Generation老年代

    Oidgeneration区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移到一定次数以后,内存对象就会被转移到oidgeneration区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间,放到老年代里不一定不会被GC回收。

    Perm永久代

    Perm主要保存class,method,filed对象,并不会被GC回收。

    Virtual区:

    最大内存和初始内存的差值,就是virtual区,年轻代,老年代,永久代上都有虚拟区(virtual)

    设置区的大小

    Jvm提供了相应的参数来对内存大小进行配置,jvm中堆被分为了3个大的区间,同时jvm也提供了一些选项对young,oidgeneration的大小进行控制

    Total heap

    l -Xms:指定了jvm初始启动以后初始化内存

    l -Xmx:指定jvm堆的最大内存,在jvm启动以后,会分配-Xmx参数指定大小的内存给JVM,但是不一定全都使用,jvm会根据-Xms参数来调节真正用于jvm的内存

    l Xmx-Xms=virtual大小(之差就是三个virtual空间大小)

    年轻代:

    l -XX:NewRatio=8意味着oidgeneration和young的比值8:1,这样eden+2*survivr=1/9堆内存

    l -XX:SurvivorRatio=32意味着eden和一个survivor的比值是32:1,这样一个Survivorj就占young区的1/34

    l -Xmn参数设置了年轻代的大小

    永久代:

    l -XX:PermSize=16M –XX:MaxPermSize=64M

    Thread Stack

    l -XX:Xss=128k

    常用参数

    参数说明:

    file.encoding 默认文件编码

    –Xmx1024m  设置JVM最大可用内存为1024MB

    –Xms1024m 设置JVM最小内存为1024m,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存

    –XX:NewSize   设置年轻代

    XX:MaxNewSize 设置最大的年轻代大小

    –XX:PermSize  设置永久代大小

    –XX:MaxPermSize  设置最大永久代大小

    –XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与终身代的比值(除去永久代)。设置为4,则年轻代与终身代所占比值为1:4,年轻代占整个堆栈的1/5

    –XX:MaxTenuringThreshold=0: 设置垃圾最大年龄,默认为15,如果设置为0的话,则年轻代对象不经过Survivor区,直接进去老年代,对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加再年轻代即被回收的概论。

    –XX:+DisableExplicitGC  这个将会忽略手动调用GC的代码使得System.gc()的调用就会变成一个空调用,完全不会出发任何GC

    tomcat中设置JVM参数

    Tomcat性能取决于内存大小

    • 上策:优化代码

    该项需要开发经验足够丰富,对开发人员要求较高

    • 中策:jvm优化机制 垃圾回收机制 把不需要的内存回收

    优化jvm--优化垃圾回收策略

    • 下策:加足够大的内存

    该项的资金投入较大

    • 下下策:每天0点定时重启tomcat

    使用较为广泛

    [root@node1 ~]# cd /usr/local/tomcat7/webapps/

     [root@node1 webapps]# rz

    优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码

    # tomcat分配1G内存模板

    [root@localhost ~]# vim /usr/local/tomcat8/bin/catalina.sh                                         //-Xms1024  这里一般修改是4个G一个实例的大小。

    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"          

    重启服务

    [root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh

    [root@localhost ~]# /usr/local/tomcat8/bin/startup.sh

    修改之前

     修改之后

  • 相关阅读:
    Leetcode--First Missing Positive
    Leetcode--LRU Cache
    java--遍历自定义数组
    爬网页?--Chrome帮你计算XPath
    log4j2配置
    winedt设置自动显示行号[latex]
    墓地雕塑-LA3708
    ctex moderncv版本更新--用latex写一个漂亮的简历
    用Jekyll在github上写博客——《搭建一个免费的,无限流量的Blog》的注脚
    用gameMaker做个小游戏
  • 原文地址:https://www.cnblogs.com/otherwise/p/11586784.html
Copyright © 2011-2022 走看看