Tomcat(三)——Tomcat的Connector及线程池配置

本文详细介绍了Tomcat的Connector参数配置,包括端口号、地址、协议和超时时间等。还讨论了线程池的重要性和配置,如最小空闲线程数、最大线程数,以及如何修改Connector的参数以实现线程池的优化。通过实例展示了线程池如何处理并发请求,并总结了线程池的关键配置项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Connector参数配置

  • port,端口号。Tomcat默认端口号是8080。
  • address,配置Connector在监听网络请求时监听在哪一个地址上。在很多服务器上,服务器上的IP是不止一个的,会有很多,如果不配置address的话,默认会在所有的IP上监听请求,有时由于安全上的原因是不被允许的。这时,通过address来指定仅仅监听哪几个地址。
  • protocol,协议。http1.1,默认的就行。
  • connectionTimeOut,客户端连接超时时间,单位是毫秒。要发请求时,建立好连接后就是不发请求。这是要耗费服务器资源的,因为有连接在挂着,服务器端分配了线程在这里对请求进行处理,如果不关闭连接,也不发请求,这个连接无法结束。如果大量的这种情况存在就会造成服务端资源耗尽。服务端需要配置这样一个参数,来使得当一个连接上面没有任何请求时,不要占着坑。
  • acceptCount ,当系统繁忙时,所有的线程都在处理请求时,没有空闲线程时,就要排队了。acceptCount是用来配置排队的长度的,就是这个队列最大是多大,默认值是100。如果排队的数超过了100,其余的请求会被拒绝处理。这时connector就不会处理新的请求了。
  • maxConnections,是指Connector同时支持的最大连接数。对BIO Connector来说是线程池的最大值。当超过这个数值时,只会被接受不会被处理,必须等前面请求处理完了,有空闲线程了才会去处理。maxConnections=-1表示不限制最大连接数,但具体的连接数还会受限于其他资源。

线程池

  • 线程的创建和销毁都是比较耗时的,如果来一个请求就创建一个线程,请求完成了响应再把线程销毁掉,这样对系统的性能损坏是比较大的。
  • 可以事先创建一定数量的线程放在那里,用完之后在放回池里,这样减少了线程的创建以及销毁过程。
  • 如在银行办理业务,银行会开一个窗口(最小空闲线程数minSpareThreads)。来个3个顾客,只有一个线程, 后面两个人排队。可以再创建两个线程,即再开两个窗口,但窗口上限即最大线程数maxThreads 。如果有来了其他的顾客,就只能排队了。
  • 3人的业务都处理完了,这时只留下一个线程就好了。对于这种线程可变的叫做弹性线程池。最小线程数保证当有请求来时尽快的进行处理,最大线程数是一个限制,是由于机器的性能等方面的原因造成的。开多了线程,他们之间的竞争很多也会影响性能
  • 最小空闲线程数:minSpareThreads
  • 最大线程数:maxThreads

修改Connector的参数配置

默认的Connector配置

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  • 默认的Connector配置,它的端口号是8080,协议是HTTP/1.1,连接超时是20秒,redirectPort是https的端口。
  • 在与Connection的平级节点上,也就是Service节点下,配置一个线程池。并在Connection中使用这个线程池。
  • 并且修改Connector的其他配置
<Service name="Catalina">
    <Executor name="myThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="10"/>

    <Connector port="8181" protocol="HTTP/1.1"
               connectionTimeout="200000"
               executor = "myThreadPool"
               redirectPort="8443" URIEncoding="UTF-8" />
</Service>                            
  • 修改了Connector的端口号,超时时间,为这个Connector配置了线程池。
  • 启动Tomcat,访问之前Restaurant的地址,端口号也要改为8181。
  • 可以把线程池中的最小空闲线程数和最大线程数都修改成1,直观的感受一下线程池的作用。
    • 通过telnet启动本地8181端口,向Restaurant发送一次请求,让请求占着,不结束。
    • 再打开另一个终端,也使用telnet启动本地8181端口,向Restaurant发送一次请求,这里敲击回车,让请求发送,但由于线程池只开了一个连接,所以第一个请求没有结束,第二个请求只能排队等待。
    • 切换到第一个窗口,回车发送请求,第一个请求处理完成,第二个请求也会跟着处理完成
    • telnet localhost 8181
    • GET /Restaurant/choose?size=small&spicy=none HTTP/1.1

总结线程池配置

  • 线程池配置项<Executor>
    • minSpareThreads
    • maxThreads
  • Connector配置线程池
    • 指定依赖的线程池配置
    • 直接指定线程池配置参数
      • 直接把minSpareThreads、maxThreads配置到Connector中
      • 这样Connector就会使用自己的配置,但注意不要配置指定依赖的Executor
  • 如果既配置了线程池配置项Executor又在Connectoior指定了自己的线程池参数,Connector会使用Executor的配置
  • 直接配置Executor,多个Connector可以共享这个Executor的配置
### Tomcat 配置教程与性能优化最佳实践 #### 一、理解Tomcat及其工作原理 Apache Tomcat是一个开源的Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP)技术。作为Web应用程序服务器,其主要功能是处理HTTP请求并将响应返回给客户端浏览器。 为了提高Tomcat的整体性能,可以通过调整运行时使用的JVM参数来实现[^1]。 #### 二、解决内存不足问题的方法 对于较大规模的应用,默认分配给Tomcat进程的内存量可能不足以支持正常运作,这可能会引发诸如`java.lang.OutOfMemoryError: Java heap space`这样的异常情况,最终造成服务端向用户展示500内部服务器错误的信息[^2]。 针对此类情形,建议通过修改启动脚本中的`CATALINA_OPTS`变量设置更大的堆大小: ```bash export CATALINA_OPTS="-Xms512m -Xmx2g" ``` 上述命令表示初始分配512MB物理内存供虚拟机使用,并允许最大扩展至2GB;具体数值应依据实际需求合理设定。 #### 、调优线程池配置 除了增加可用RAM外,还可以考虑优化连接器部分——即负责接收来自外部网络的数据包并将其转发到相应的处理器组件上的一组类和服务接口。默认情况下,NIO协议下的maxThreads属性被设为200,意味着同一时刻最多可并发执行的任务数不超过该值。当业务逻辑较为复杂或者预期访问量巨大时,则有必要适当放宽此限制: ```xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="400"/> ``` 以上XML片段展示了如何将最大线程数量提升到了400个实例级别。 #### 四、启用压缩传输机制 开启GZIP数据流编码有助于减少带宽消耗,在一定程度上加快页面加载速度。只需简单编辑server.xml文件内的相应节点即可完成这项改动: ```xml <Connector ... compression="on"> <!-- 可选:指定哪些MIME类型的资源应该受到压缩 --> <Compression mimeTypes="text/html,text/xml,application/json"/> </Connector> ``` 这样做的好处是可以显著降低静态文本型资产在网络上传输所需的时间开销。 #### 五、定期重启维护计划 最后但同样重要的是,建立规律性的停机检修制度也能够有效防止因长时间不间断运转而积累下来的各类潜在隐患影响系统稳定性。比如每晚凌晨两点钟自动停止所有正在运行的服务,清理临时缓存目录后再重新激活它们。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值