APR
安装起来最困难,但是从操作系统级别来解决异步的IO问题,能够大幅度的提高性能 。即Apache PortableRuntime,从操作系统层面解决IO阻塞问题 。
Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式 。
Linux如果安装了apr和native,Tomcat直接启动就支持apr 。
具体安装办法 参见这个地址:
https://my.oschina.net/lsw90/blog/181161
Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:
StartingProtocolHandler ["http-bio-8080"]StartingProtocolHandler ["http-nio-8080"]StartingProtocolHandler ["http-apr-8080"]

文章插图
Tomcat7及以下版本启动启动NIO模式:
修改server.xml里的Connector节点,修改protocol为:
org.apache.coyote.http11.Http11NioProtocol,如下:
修改前:

文章插图

文章插图

文章插图
修改后:

文章插图

文章插图

文章插图
为什么它不直接改成NIO的形式呢?
这个方式是利用了jdk 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)为桥梁实现的,不改成这种优化方式就是为了兼容1.4之前的JAVA项目也能跑起来 。
2、线程池(执行器)
Connector节点:
官方文档:
https://tomcat.apache.org/tomcat-8.5-doc/config/http.html
默认的tomcat没有启用线程池,在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能 。这里前台其实有一个调度线程,然后调度线程会放入线程池内,然后到到一定的时候线程池的任务变成工作线程 。
开启线程池:

文章插图

文章插图

文章插图
maxThreads配置为500,但显示为-1,查询官方文档发现:

文章插图
意思是该属性配置处理并发请求的最大线程数,如果不配置默认值是200 。如果配置了executor属性,这个属性会被忽略 。注意斜体部分提到:如果executor设置了值,使用JMX查看的时候这个值会是-1,这是正常的 。
详细参数解释如下:
将原有的Executor标签内容替换成如下内容
<Executor name="tomcatThreadPool" --线程池名 namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="30" maxIdleTime="60000" prestartminSpareThreads = "true" maxQueueSize = "100"/>- maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断
- minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
- maxIdleTime:如果当前线程大于初始化线程,那空闲线程存活的时间,单位毫秒,默认60000=60秒=1分钟 。
- prestartminSpareThreads:在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
- maxQueueSize:最大的等待队列数,超过则拒绝请求

文章插图
替换后访问速度肯定会比以前快
- protocol:Tomcat 8 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol
- protocol:Tomcat 6 设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
- protocol:Tomcat 8 设置 APR 性能飞快:org.apache.coyote.http11.Http11AprProtocol
- connectionTimeout:Connector接受一个连接后等待的时间(milliseconds),默认值是60000 。
推荐阅读
- python3快速爬取房源信息,并存入mysql数据库,超详细
- HTTP2.0的技术构架总结 与 Nginx和Tomcat配置HTTP2.0
- 非常详细的锐捷网关路由配置教程,适合新手小白
- CentOS下MySQL8.0的超详细的安装及配置文档
- Tomcat顶层架构
- nginx和tomcat中的https证书配置
- Tomcat中一种半通用回显方法
- 超详细的网络抓包神器 tcpdump 使用指南
- 最详细的Python库总结
- Tomcat是如何运行的?整体架构又是怎样的?
