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

[id_[id_567305359]455836859]

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

我们能够打开 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 模式,并且在这个过程中不添加最大等待队列,然后观察效果。


    
 
   

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

26阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读