闲来无事整理一下以前笔记,看到了以前关于tomcat优化方面记得一些笔记,发一个,希望对有需要的人一个帮助
tomcat优化主要就是优化tomcat中的server.xml中的一些配置
一、配置tomcat管理员账户,在tomcat-users.xml中添加一下账户
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
启动并访问tomcat
二、tomcat的优化
tomcat的运行模式有3种:
1、bio : blocking IO 阻塞IO
默认的模式,性能非常低下,没有经过任何优化处理和支持.
2、nio
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并
能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性
能。
3、apr
tomcat7或同tomcat8安装在win7及以上系统默认即使该方式,从操作系统级别来解决异步的IO问题,大幅度的提高性能.
可以通过修改server.xml配置将bio修改成nio
![](https://i-blog.csdnimg.cn/blog_migrate/bb5d28b75a39034a2ce1bc0f51b61d2f.png)
改成
三、线程池优化
将连接池注释放开,修改最大线程数以及最小连接数,个人查阅资料最优配置为最大线程数800,最小连接数100,如下:
四、禁用ajp来连接器
ajp类似与nginx的一个静态资源服务器,已经被nginx取代
注释掉该配置
tomcat的运行基于jvm,tomcat优化完自然要优化一下jvm,这样才能使tomcat达到最大性能,接下来就是一些jvm的优化。
jvm中主要分为栈,堆,方法区,jvm优化主要优化堆内存,对内存分为新生区、老年区、永久区。
jvm堆内存图:
Young区(新生区):被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中
一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候, GC就会将存活的对象移到空闲的Survivor区
间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。
Tenured区(老年区):主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对
象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间。
Perm区(永久区):主要保存class,method,filed对象,这部份的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及
到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMemoryError : PermGen space 的错误,造成这个错误的很大原
因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在了perm中,这
种情况下,一般重新启动应用服务器可以解决问题。
如果项目中对象创建频繁,用完就扔掉,将年轻区的内存设置高点,年轻区越大对象存活时间越长,垃圾回收次数越多,被回收
概率越高,如果对象很少,很少创建和销毁,将老年区设置高点。
永久区一般设置固定值,年轻区与老年区通过比例来确定大小
◆ Total Heap
-Xms :指定了JVM初始启动以后初始化内存
-Xmx:指定JVM堆得最大内存,在JVM启动以后,会分配-Xmx参数指定大小的内存给JVM,但是不一定全部使用,JVM会根据-Xms参数来调节真正用于JVM的内存
-Xmx -Xms之差就是三个Virtual空间的大小
◆ Young Generation
-XX:NewRatio=8意味着tenured 和 young的比值8:1,这样eden+2*survivor=1/9 堆内存
-XX:SurvivorRatio=32意味着eden和一个survivor的比值是32:1,这样一个Survivor就占Young区的1/34.
-Xmn 参数设置了年轻代的大小
◆ Perm Generation
-XX:PermSize=16M -XX:MaxPermSize=64M
Thread Stack
-XX:Xss=128K
linux中tomcat内存设置bin/catalina.sh:
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
window中tomcat内存设置bin/catalina.bat:
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC