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

 

修改之前

 

 

 修改之后

 

 

posted on 2019-09-25 19:12  像鱼拥抱大海  阅读(888)  评论(0编辑  收藏  举报

导航