Tomcat优化配置指南:管理页面设置与AJP服务禁用技巧
[id_[id_567305359]455836859]

我们能够打开 Tomcat 的管理页面。这一操作需要先进行配置。具体来说,要在 tomcat-users.xml 中添加相关的用户和角色信息。
如果访问提示出现了403的错误,则修改
webapps 目录下的 manager 文件夹中的 META-INF 文件夹中的 context.xml 里的内容
访问Tomcat服务
然后输入配置的账号密码
可以看到对应的监控信息
2. 禁用AJP服务
AJP 是一种定向包协议。由于性能方面的原因,它采用二进制格式来传输具有可读性的文本。WEB 服务器通过 TCP 连接与 SERVLET 容器相连接。为了降低进程生成 socket 所产生的花费,
WEB 服务器与 SERVLET 容器尝试维持持久性的 TCP 连接,会对多个请求和回复的循环使用同一个连接。当连接被分配给某一个特定的请求后,在该请求处理循环结束之前,不会再次进行分配。
换句话说,从连接方面来看,请求并非是多元的。这使得连接两端的编码变得较为容易,即便这会导致在某一时刻会出现很多连接。
我们通常使用的是 Nginx + Tomcat 的架构,因此无需使用 AJP 协议,能够将 AJP 连接器禁用。
3.Executor优化
Tomcat 中每一个用户请求都构成一个线程。对于线程池,我们能够提供相应的优化,以提升性能。
涉及到的几个参数
参数
说明
maxThreads
不同版本的最大并发数默认值存在差别,其范围在 150 到 200 之间,通常建议将其设置为 500 到 1000 。
minSpareThreads
初始化的线程数
maxQueueSize
最大等待的队列数,超过就拒绝了
4.三种运行模式
默认模式的性能非常低下,并且没有经过任何优化处理,也没有得到任何支持。
nio 指的是 new I/O,它进行的是同步非阻塞的 I/O 操作,这种操作方式相较于传统的 bio 而言,具备更好的并发运行性能。
需要安装 apr 包,这比较麻烦。需要安装 apr-utils 包,这也比较麻烦。需要安装 tomcat-native 包,同样比较麻烦。它们是 Apache HTTP 服务器的支持库。你可以简单理解为,Tomcat 会通过 JNI 的方式调用 Apache HTTP 服务器的核心动态链接库,以此来处理文件读取或网络传输操作,这样就能大幅提升 Tomcat 对静态文件的处理性能。Tomcat apr 是在 Tomcat 上运行高并发应用的优先选择模式。
@Deprecated
设置协议的方法是传入一个字符串类型的协议参数。 这个协议参数将被用于设置相关的协议。 具体的设置操作是在这个方法内部进行的。 它会根据传入的协议参数来确定和修改相关的协议设置。 这样就可以通过调用这个方法来设置特定的协议。
布尔类型的 aprConnector 等于 AprLifecycleListener 是否可用的判断结果与
获取使用 APR 连接器的方法为 AprLifecycleListener.getUseAprConnector()。
如果协议等于“HTTP/1.1”,或者协议为 null ,那么就满足条件。
if (aprConnector) {
设置协议处理程序类名为"org.apache.coyote.http11.Http11AprProtocol"。
} else {
设置协议处理器类名("org.apache.coyote.http11.Http11NioProtocol");
}
如果协议等于“AJP/1.3”,则执行以下操作。
if (aprConnector) {
设置协议处理程序类名为“org.apache.coyote.ajp.AjpAprProtocol”。
} else {
设置协议处理程序类名为"org.apache.coyote.ajp.AjpNioProtocol"。
}
} else {
设置协议处理程序类名(protocol)。
}
}
调整对应的配置
5.web.xml
最终观察 tomcat 的启动日志,包括其在特定时间的内容,同时关注线程的开销、内存的大小以及 GC 情况。
DefaultServlet
default
Apache 的 Catalina 中的 Servlets 有一个名为 DefaultServlet 的组件。
debug
0
listings
false
1
JspServlet
jsp
org.apache 这个部分,jasperservlet 这个 servlet,JspServlet 这个名称所对应的东西,是与 Jasper 相关的一个 servlet 组件,在 Apache 环境中发挥着特定的作用。
fork
false
xpoweredBy
false
3
welcome-list-file
index.html
index.htm
index.jsp
mime-mapping移除响应的内容
zip
application/zip
zir
application/vnd.zul
session-config
默认jsp页面有session,就是在于这个配置
30
6.Host标签
Tomcat 运行时,需用一个线程将其拿出来进行检查。在生产环境之下,一定要将其改为 false。
unpackWARs 可以实现对 war 包的自动解压缩,并且将生产环境从原来的状态改为 false 。
7.Context标签
reloadable:false
如果这个属性被设置为 true,那么在 tomcat 服务器运行状态下,它会对 WEB-INF/classes 和 WEB-INF/lib 目录下的 class 文件的改动进行监视。如果监测到有 class 文件被更新,服务器就会自动重新加载 Web 应用。
在开发阶段把 reloadable 属性设定为 true ,这对调试 servlet 以及其他的 class 文件是有帮助的。然而,这样做会加重服务器的运行负荷。所以建议在 Web 应用的发布阶段将 reloadable 设为 false 。
其他方面包括 JMeter 测试。
我们可以使用 JMeter 对相关数据进行测试,以直观地展示给大家。我们在 tomcat8.0 的服务里部署了一个 war 服务。
我们去寻找一个 FlowableUI 的 war 包,然后让它正常启动,这样就能够正常访问了。
然后我们通过JMeter来压测:
设置请求相关信息
选择几个监听器
然后执行:吞吐量:4103
然后我们禁用掉AJP
再测试:4149 稍微有点提升
然后我们自定义线程池
记得关联上
吞吐量:4188
我们调整下线程池的相关数据,最大线程数为 1000,最小线程数为 100,然后再进行查看。
没有明显区别,此时我们能够设定最大的等待队列,其大小为“100”,即 maxQueueSize = “100”
我们可以发现,添加了最大阻塞队列之后,吞吐量提升到了 5203 。提升效果较为显著。然而,同样地,异常率提升了很多,达到了 32.6% 。当然,这也是一种正常的现象。
我们最后修改运行的模式。将其改为 NIO2 模式,并且在这个过程中不添加最大等待队列,然后观察效果。