TOMCAT 内存优化

 近期在做一个系统,服务器内存有128G,系统用window server,觉得已经好6了。下载了一个tomcat8,然后把项目直接放进去,启动,成功。开始以为没什么事的,但是测试人员在测试的时候,有时候会遇到系统卡顿现象,开始以为数据库量大的问题,到时候查询速度受影响了,但是有时候一些数据量小的查询都会出现卡顿慢的现象,这样就觉得奇怪了,因为在以前公司,都是用jboss作为项目中间件的,对tomcat并不是很熟,后来打开任务管理器一看,java.exe占了9G内存,就觉得好奇怪了,然后打开jconsole一看,堆内存占了9G,还不停上涨,后来观察了一下,对内存到达10G,才GC一次,大概知道问题所在了,后来经常查阅资料:

Tomcat内存参数:

  • -server:一定要作为第一个参数,在多个CPU时性能佳
  • -Xms:java Heap初始大小。 默认是物理内存的1/64。
  • -Xmx:java heap最大值。建议均设为物理内存的一半。不可超过物理内存。
  • -XX:PermSize:设定内存的永久保存区初始大小。缺省值为64M。
  • -XX:MaxPermSize:设定内存的永久保存区最大 大小。缺省值为64M。
  • -Xmn:young generation(年轻代)的heap大小。一般设置为Xmx的3、4分之一

         Tomcat内存配置,直接在startup.bat第一行增加配置即可:

TOMCAT 内存优化_第1张图片

-Xms:初始内存大小
-Xmx:最大内存
-XX:PermSize:设定内存的永久保存区初始大小(永久是指方法区、永久代,还有年轻代、老年代)
-XX:MaxPermSize:设定内存永久保存区最大大小
-XX:NewSize:设置新生代初始化大小
-XX:MaxNewSize:设置新生代最大大小

BTW:

     1、Sun官方建议年轻代的大小为整个堆的3/8左右, 所以按照上述设置的方式,基本符合Sun的建议。 

     2、堆大小=年轻代大小+年老代大小, 即xmx=xmn+老年代大小 。 Permsize不影响堆大小。应尽量把永久代的初始值与最大        值设置为同一值,因为永久代的大小调整需要进行FullGC 才能实现。

     3、为什么要按照上面的来进行设置呢? 没有具体的说明,但应该是根据多种调优之后得出的一个结论。

依据的原则是根据Java Performance里面的推荐公式来进行设置。

TOMCAT 内存优化_第2张图片

具体来讲:

Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍

永久代 PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。

年轻代Xmn的设置为老年代存活对象的1-1.5倍。

老年代的内存大小设置为老年代存活对象的2-3倍。

重启tomcat项目,打开jconsole观察,相当正常,系统也开始稳定下来了,下图:可以看到系统在内存到达600M后就会回收空闲内存,基本不会发生溢出的情况,最高用了1G内存,说明系统的性能还是很优越的,用户数再增加也能在一定程度上保证系统稳定性。

TOMCAT 内存优化_第3张图片

你可能感兴趣的:(资讯)