Tomcat 调优技巧(Tomcat Tuning Tips)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 IT核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云计算、人工智能、运维开发、算法结构、物联网、JAVA Python语言等。
不同类型针对性训练,提升编程思维,剑指大厂非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

一、Tomcat简介

Tomcat是Apache软件基金会(Apache Software Foundation)项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当公司运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。Tomcat最新版本为10.0.23。

二、Tomcat 调优技巧

Tomcat调优这块,在面试中会经常问道。目前Tomcat调优主要分为2大类,当前解释用的版本是Tomcat 8:

  Tomcat的自身调优:采用动静分离节约 Tomcat 的性能调整 Tomcat 的线程池调整 Tomcat 的连接器修改 Tomcat 的运行模式禁用 AJP 连接器

  JVM的调优:调优Jvm内存

1. Tomcat自身调优

1.1 采用动静分离

  静态资源如果让 Tomcat 处理的话 Tomcat 的性能会被损耗很多,所以我们一般都是采用:Nginx+Tomcat 实现动静分离,让 Tomcat 只负责 jsp 文件的解析工作,Nginx 实现静态资源的访问。

1.2 调优Tomcat线程池

  打开tomcat的server.xml,配置Executor,相关参数说明如下。  

<Executor name="tomcatThreadPool" 
        namePrefix="catalina-exec-"
        maxThreads="500" 
        minSpareThreads="20"
        maxIdleTime="60000"/>

  name:给执行器(线程池)起一个名字;

  namePrefix:指定线程池中的每一个线程的 name 前缀;

  maxThreads:线程池中最大的线程数量,假设请求的数量超过了 750,这将不是意味着将 maxThreads 属性值设置为 750,它的最好解决方案是使用「Tomcat集群」。也就是说,如果有 1000 请求,两个 Tomcat 实例设置 maxThreads = 500,而不在单 Tomcat 实例的情况下设置 maxThreads=1000。

  minSpareThreads:线程池中允许空闲的线程数量(多余的线程都杀死);

  maxIdLeTime:一个线程空闲多久算是一个空闲线程(单位毫秒,这里配置的是1分钟);

  其他的配置其实阅读官方文档是最好的。

1.3 调优Tomcat的连接器Connector   

<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" enableLookups="false" URIEncoding="UTF-8" redirectPort="8443" />

  executor:指定这个连接器所使用的执行器(线程池),1.2配置的Executor名称;

  port:访问端口;

  protocol:设置处理传入流量的协议;默认值是HTTP/1.1,它使用自动切换机制来选择基于非阻塞Java NIO的连接器或基于APR/本机的连接器。

  enableLookups=false:关闭 DNS 解析,减少性能损耗;

  URIEncoding:字符编码,如果未指定默认就是UTF-8

  minProcessors:服务器启动时创建的最少线程数;

  redirectPort:重定向端口,如果不支持非SSL请求,可以去掉。

  其他的配置其实阅读官方文档是最好的。

1.4 通过修改Tomcat的运行模式

  这里指的是Connector配置中的protocol属性,如果不用Tomcat版本自带的配置,可以手动指定。

  BIO:Tomcat8 以下版本,默认使用的就是 BIO「阻塞式IO)」模式。对于每一个请求都要创建一个线程来进行处理,不适合高并发。

  NIO :Tomcat8 以上版本,默认使用的就是NIO模式「非阻塞式 IO」。

  APR:全称 Apache Portable Runtime,是Tomcat生产环境运行的首选方式,如果操作系统未安装 APR 或者 APR 路径未指到 Tomcat 默认可识别的路径,则 APR 模式无法启动,自动切换启动 NIO 模式。所以必须要安装 APR 和 Native,直接启动就支持 APR,APR是从操作系统级别解决异步 IO 问题,APR 的本质就是使用 JNI 技术调用操作系统底层的 IO 接口,所以需要提前安装所需要的依赖提升 Tomcat 对静态文件的处理性能,当然也可以采用动静分离。

1.5 禁用AJP连接器 

  AJP的全称 Apache JServer Protocol,使用 Nginx+Tomca t的架构,所以用不着 AJP 协议,所以把AJP连接器禁用。就是注掉下面这段:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
2. JVM调优
  Tomcat 是运行在JVM上的,所以对 JVM 的调优也是非常有必要的。在\bin文件下找到 catalina.sh。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux运维老纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值