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参数设置了年轻代的大小
永久代:
Thread Stack
l -XX:Xss=128k
常用参数
参数说明:
file.encoding 默认文件编码
XX:MaxNewSize 设置最大的年轻代大小
在tomcat中设置JVM参数
Tomcat
- jvm
jvm--
- 0tomcat
[root@node1 ~]# cd /usr/local/tomcat7/webapps/
[root@node1 webapps]# rz
catalina.shcatalina.sh:
# tomcat1G
[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
修改之后
来源:博客园
作者:像鱼拥抱大海
链接:https://www.cnblogs.com/otherwise/p/11586784.html