侧边栏壁纸
博主头像
侯秀荣

贪婪和恐惧是人性的两大弱点,
人类几万年,人性也没进步1厘米。

  • 累计撰写 172 篇文章
  • 累计收到 3 条评论

tomcat设置JVM参数调优

2019-3-17 / 0 评论 / 1736 阅读

一、修改bin/catalina.bat文件设置参数(注释后第一行),增加

set JAVA_OPTS=

-server 

-Xms1000M 

-Xmx1000M   #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落

-Xss512k 

-XX:+AggressiveOpts 

-XX:+UseBiasedLocking 

-XX:PermSize=64M 

-XX:MaxPermSize=300M 

-XX:+DisableExplicitGC 

-XX:MaxTenuringThreshold=31 

-XX:+UseConcMarkSweepGC 

-XX:+UseParNewGC  

-XX:+CMSParallelRemarkEnabled 

-XX:+UseCMSCompactAtFullCollection 

-XX:LargePageSizeInBytes=128m  

-XX:+UseFastAccessorMethods 

-XX:+UseCMSInitiatingOccupancyOnly 

-Djava.awt.headless=true



-Xms:设置JVM初始内存大小(默认是物理内存的1/64)

-Xmx:设置JVM可以使用的最大内存(默认是物理内存的1/4,建议:物理内存80%)

-Xmn:设置JVM最小内存(128-256m就够了,一般不设置)

默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、

-Xmx相等以避免在每次GC 后调整堆的大小。

在较大型的应用项目中,默认的内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError:Java heap space”,从而

导致客户端显示500错误。

-XX:PermSize :为JVM启动时Perm的内存大小

-XX:MaxPermSize :为最大可占用的Perm内存大小(默认为32M)

-XX:MaxNewSize,默认为16M



PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到

PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的

话,就很可能出现“java.lang.OutOfMemoryError:PermGen space”错误。

对于WEB项目,jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小,为了避免调整),你可以使用更多的参数配置。如果你的WEBAPP下都用了大量的第三

方jar, 其大小超过了jvm默认的大小,那么就会产生此错误信息了。

其它参数:

-XX:NewSize :默认为2M,此值设大可调大新对象区,减少FullGC次数

-XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)

-XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)

-XX:userParNewGC 可用来设置并行收集【多CPU】

-XX:ParallelGCThreads 可用来增加并行度【多CPU】

-XXUseParallelGC 设置后可以使用并行清除收集器【多CPU】



二、Tomcat连接参数的优化,主要是针对吞吐量做优化:

修改conf/server.xml文件,把原来

<Connector port="8080" protocol="HTTP/1.1" />

改成下面的内容:

<Connector port="8080" protocol="HTTP/1.1"

 URIEncoding="UTF-8"  

 minSpareThreads="25" 

 maxSpareThreads="75"

 enableLookups="false" 

 disableUploadTimeout="true" 

 connectionTimeout="20000"

 acceptCount="300"   

 maxThreads="300" 

 maxProcessors="1000" 

 minProcessors="5"

 useURIValidationHack="false"

 compression="on" 

 compressionMinSize="2048"

 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

 redirectPort="8443"/>


评论一下?

OωO
取消