Tomcat的JVM优化

一、JVM管理内存段分类

1、线程共享内存

方法区:存储jvm加载的class、常量、静态变量、及时编译器编译后的代码等

java堆:存储java所有对象实例、数组等

2、线程私有内存

程序计数寄存器:每个线程有自己的计数寄存器,存储当前线程执行字节码的地址

jvm栈:jvm会为每个运行线程分配一个栈区,线程调用方法时和方法返回时会进行入栈和出栈操作

本地方法栈区:与jvm stack类似,只不过此区域是为调用本地方法服务

二、各参数代表的意义

-Xms:堆内存空间的初始大小

-Xmx:堆内存的最大值

-Xmn:年轻代大小(1.4 or later),默认值大小为整个堆的3/8

-XX:NewSize:新生代的初始空间大小(for 1.3/1.4)

-XX:MaxNewSize:新生代空间的最大值(for 1.3/1.4)

-XX:PermSize:持久带的初始值

-XX:MaxPermSize:持久带的最大值

-XX:NewRatio:年轻代(包括Eden和两个Survivor区)与老年代的比值(除去持久代)

       设置为4则表示: 新生代/老年代=1:4,即年轻代占堆的1/5

       Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。

-XX:SurvivorRatio:在新生代内部Eden/survivor的值

         设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10

三、举例说明

linux环境:catalina.sh

export CATALINA_OPTS="-Xms3550m -Xmx4096m -Xss256K -XX:PermSize=128m -XX:MaxPermSize=256m"

windows环境:catalina.bat

set CATALINA_OPTS=-server -Xms256m -Xmx1300m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000

四、常用配置

1、堆设置

-Xms:初始堆大小

-Xmx:最大堆大小

-Xss:每个线程的堆栈大小

-Xmn:设置年轻代大小

-XX:NewSize=n:设置年轻代大小

-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4

-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

-XX:MaxPermSize=n:设置持久代大小

2、收集器设置

-XX:+UseSerialGC:设置串行收集器

-XX:+UseParallelGC:设置并行收集器

-XX:+UseParalledlOldGC:设置并行年老代收集器

-XX:+UseConcMarkSweepGC:设置并发收集器

3、垃圾回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:filename

4、并行收集器设置

-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。

-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间

-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

5、并发收集器设置

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。

-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

五、java性能查看工具

jstat:打印垃圾收集器的信息

jps:查看进程

jstat -gc 进程号:查看垃圾收集器的信息

jconsile、VisualVM、jprofiler、janalyzer

posted @ 2016-04-20 17:22  fansik  阅读(279)  评论(0编辑  收藏  举报