1. tomcat server , service,端口 不建议优化。 这两个组件只有一个容器没有什么实际作用,端口的修改只对请求时产生影响其他方面没有什么影响;
2. connector 连接器优化;协议优化和连接超时时间
连接器:BIO(同步阻塞) 场景: 并发量比较低 NIO(同步非阻塞) 场景:并发量高
<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" executor="tomcatThreadPool" />
<Connector executor="tomcatThreadPool" port="8088" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" minProcessors="5" maxProcessors="75" acceptCount="1000"/>
executor:表示使用该参数值对应的线程池;
minProcessors:服务器启动时创建的处理请求的线程数;
maxProcessors:最大可以创建的处理请求的线程数;
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/>
name:线程池的名字,必须唯一,默认值:None
namePrefix:线程池中每个线程的name值的前缀,默认值:tomcat-exec-
maxThreads:该线程池可以容纳的最大线程数。默认值:200
minSpareThreads:始终打开的最小不活跃线程数。默认值:25
maxIdleTime:关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)
- 增加线程是有成本的,JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以更多的线程异味着更多的内存;
- 更多的线程会带来更多的线程上下文切换成本。
线程池的配置:
默认: protocol="HTTP/1.1" ----> NIO
通过设置protocol 方式 来选择 连接器
3. engine 因为不常用所以不用优化
4. Host 映射 webapps 删除不用的标签,所有不用标签尽量删除;
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
unpackWARs:自动解压(线程解压,会占用资源,慎重考虑)
autoDeploy:自动部署(占用资源,慎重考虑)
5. Listener 监听器 会占用内存,如果不需要的就尽量删除;
6. tomcat 删除session,静态和jsp的 处理能力,这些标签的使用会占用线程资源(根据时间情况使用);
tomcat--->conf--->web.xml
删除处理 静态资源servlet的能力;
根据需要删除处理资源的能力(慎用,删除前备份)
删除处理 jsp资源的能力;
删除session(慎用)
7. tomcat中堆内存的使用,会导致垃圾回收的频率,会导致线程资源占用,可以优化;
尽量不要创建多余对象;
8. 项目中的servlet,filter,error.....等等会被tomcat解析,占用tomcat的线程资源,可以优化;
wxb.xml中多余的标签删除;
server.xml中多余的标签删除;
tomcat占用太多线程,会受机器CPU,内存的限制;线程占用越多会导致运行线程越少,处理越慢;
架构图: