一线大厂Java面试必问的2大类Tomcat调优
一、前言
最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类。
1、Tomcat的自身调优
采用动静分离节约 Tomcat 的性能
调整 Tomcat 的线程池
调整 Tomcat 的连接器
修改 Tomcat 的运行模式
禁用 AJP 连接器
2、JVM的调优
调优Jvm内存
二、Tomcat 自身调优
1、采用动静分离
静态资源如果让 Tomcat 处理的话 Tomcat 的性能会被损耗很多,所以我们一般都是采用:Nginx+Tomcat 实现动静分离,让 Tomcat 只负责 jsp 文件的解析工作,Nginx 实现静态资源的访问。
2、调优 Tomcat 线程池
打开tomcat的serve.xml,配置Executor,相关参数说明如下。
name:给执行器(线程池)起一个名字;
namePrefix:指定线程池中的每一个线程的 name 前缀;
maxThreads:线程池中最大的线程数量,假设请求的数量超过了 750,这将不是意味着将 maxThreads 属性值设置为 750,它的最好解决方案是使用「Tomcat集群」。也就是说,如果有 1000 请求,两个 Tomcat 实例设置 maxThreads = 500,而不在单 Tomcat 实例的情况下设置 maxThreads=1000。
minSpareThreads:线程池中允许空闲的线程数量(多余的线程都杀死);
maxIdLeTime:一个线程空闲多久算是一个空闲线程;
其他的配置其实阅读官方文档是最好的「见参考链接」。
3、调优 Tomcat 的连接器 Connector
打开 Tomcat 的 serve.xml,配置 Connector,参数说明如下。
executor:指定这个连接器所使用的执行器(线程池);
enableLookups=false:关闭 DNS 解析,减少性能损耗;
minProcessors:服务器启动时创建的最少线程数;
maxProcessors:最大可以创建的线程数;
acceptCount=1000:线程池中的线程都被占用,允许放到队列中的请求数;
maxThreads=3000:最大线程数;
minSpareThreads=20:最小空闲线程数,这里是一直会运行的线程;
与压缩有关系的配置:如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要配置在 Tomcat 中配置压缩了;
一个完整的配置如下。
4、通过修改 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 对静态文件的处理性能,当然也可以采用动静分离。
5、禁用 AJP 连接器
AJP的全称 Apache JServer Protocol,使用 Nginx+Tomca t的架构,所以用不着 AJP 协议,所以把AJP连接器禁用。
三、JVM 调优
Tomcat 是运行在 JVM 上的,所以对 JVM 的调优也是非常有必要的。
欢迎大家关注我的公种浩【程序员追风】,文章都会在里面更新,整理的资料也会放在里面。
找到 catalina.sh;
添加;
参数设置;
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8-server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XXermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。
最后
欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
值得收藏!16段代码入门Python循环语句
[ 导读 ]本文重点讲述for语句和while语句。for语句属于遍历循环,while语句属于当型循环。除了两个循环语句外,还介绍了break、continue与pass三个用于控制循环结构中的程序流向的语句。在此基础之上,也介绍了列表推导式,这是一种特殊的循环语句。 循环语句又称为重复结构,用于反复执行某一操作。面对大数量级的重复运算,即使借助计算机,重复编写代码也是费时的,这时就需要借助循环语句。使用循环语句一般要用到条件判断,根据判断式的返回值决定是否执行循环体。 循环分为两种模式,一种是条件满足时执行循环体,另一种则相反,在条件不满足时执行循环体。前者称为当型循环,后者称为直到型循环。 在图1中,虚线框内是一个当型循环结构,此结构包含判断条件和循环体,以及连接各部分的流向线。程序执行时,先判断条件的真假。判断为真时,则执行循环体;判断为假时,不再执行循环体,循环结束。当型循环先进行条件判断,如果满足循环条件,再执行循环体,因此又被称为前测试型循环。 在图2中,虚线框内是一个直到型循环结构,此结构包括判断条件和循环体,以及连接各部分的流向线。程序执行时,先执行一次循环体,再判断执...
- 下一篇
Cassandra repair 工具使用
前言 Cassandra是一款去中心化的分布式数据库。一份数据会分布在多个对等的节点上,即有多个副本。我们需要定期的对多个副本检查,看是否有不一致的情况。比如因为磁盘损坏,可能会导致副本丢失,这样同一份数据的多个副本就会出现不一致。 nodetool repair Cassandra提供的nodetool中提供了repair这个工具,可以用来日常巡检数据的一致性。或者当修修改了keysapce 副本配置时,也需要运行此工具。 可以通过nodetool help 'repair'查看命令帮助,如下: NAME nodetool repair - Repair one or more tables SYNOPSIS nodetool [(-h <host> | --host <host>
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题