Tomcat的优化

在这里插入图片描述

面试被问到了Tomcat的优化,咋整,我们没准备,就瞎扯了亿点点;
在这里插入图片描述

关于优化的问题,始终是面试一项必问的问题,然而我没想到的是竟然问的是tomcat优化…
就是这只猫 …
在这里插入图片描述
先来整理一下吧!

Tomcat 内存优化

由于tomcat使用java写的,所以我们像配置jvm那样去配置一下tomcat的参数;
在这里插入图片描述
在 tomcat 的启动脚本 catalina.bat中设置一些参数
JAVA_OPTS参数说明
  -server 启用jdk 的 server 版
  -Xms java虚拟机初始化时的最小内存
  -Xmx java虚拟机可使用的最大内存
  -XX: PermSize 内存永久保留区域 #jdk1.8时已经废弃了
  -XX:MaxPermSize 内存最大永久保留区域 #jdk1.8时已经废弃了

配置示例:

windows中
如果是在windows下,那么在@echo off下添加
在jdk1.8之前----->>

set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

jdk1.8中废弃了-XX:PermSize和-XX:MaxPermSize的持久态(存放常量、静态变量区)配置,所以如果添加了-XX:PermSize和-XX:MaxPermSizetomcat会启动失败;

本次测试用的jdk11,所以作如下配置

  set JAVA_OPTS=-server -Xms1024m -Xmx2048m -Xss2m  -XX:MetaspaceSize=256m   -XX:MaxNewSize=256m  

测试—

在这里插入图片描述
在linux中,要修改catlina.sh

cygwin=false 之上添加

JAVA_OPTS=’-Xms1024m -Xmx2048m -Xss2m -XX:MetaspaceSize=256m    -XX:MaxNewSize=1024m ’

在这里插入图片描述

Tomcat并发优化

即调整Tomcat的并发处理能力
在tomcat的配置文件夹下----conf

找到Connector配置---->>>如下图

在这里插入图片描述

参考配置如下
在这里插入图片描述
配置说明:

maxThreads :客户请求最大线程数
minSpareThreads :**Tomcat初始化时创建的 socket 线程数**
maxSpareThreads: Tomcat连接器的最大空闲 socket 线程数
enableLookups :是否**反查域名,**取值为: truefalse 。为了提高处理能力,应设置为 false 
redirectPort: 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount: 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout: 连接超时
minProcessors: 服务器创建时的最小处理线程数
maxProcessors: 服务器同时最大处理线程数
URIEncoding: URL统一编码

和最大连接数相关的参数为maxProcessors和acceptCount ,如果要加大并发连接数,应同时加大这两个参数。

压缩优化

在这里插入图片描述

配置内容

compression="on" 打开压缩功能
compressionMinSize="2048"启用压缩的输出内容大小,默认为2KB
noCompressionUserAgents="gozilla,traviata" 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 明确哪些资源类型需要压缩

线程优化

与线程优化有关的配置---->>

maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100

minSpareThreads:Tomcat初始化时创建的线程数。
maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
在这里插入图片描述maxThreads的数值设置
一般要考虑两方面的原因----->>

  • 1,cpu的运算能力

如果业务逻辑中cpu计算比较多的话,那么应该减少maxThreads的值以降低同一时间内争抢CPU的线程个数(减少cpu计算到一半时又转去处理其他的任务这之间CPU的切换时间),让cpu能够尽快完成计算任务,这样才能提高系统性能;

  • 2,IO操作
    如果业务逻辑中对于IO操作比较多的话,外部等待的时间会增加,这样CPU就会闲置,因此可以适当增加maxThreads的值,这样才能提高比你高发处理能力;

实际生产中更多的时两者相结合的情况;

maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销;

acceptCount的配置,
即等待队列的大小设置,太大太小都不好,同时要配合线程数量的设置才能发挥很好的效能;

一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。如果设的较小,可以保证接受的请求较快响应,但是超出的请求可能就直接被拒绝,如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。

调整线程数
在这里插入图片描述

协议类型优化

关闭AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。若tomcat未与apache配合使用,因此不使用此连接器,因此需要注销掉该连接器。

当然默认也是关闭的
在这里插入图片描述

bio模式

数据的读取与写入都必须阻塞在一个线程中执行,在在写入完成或读取完成前,线程时阻塞的;在传统的BIO中,一个客户端请求服务器后,服务器会经过Sokcet启动一条链路将其连接并且处理,该链路的IO操作是同步阻塞的,所以该客户端和服务器的连接不可被其他客户端所使用,只能够等待当前的客户端操作完成后释放掉当前连接。
如果该连接不做任何操作就会造成不必要的线程开销;

nio模式

同步非阻塞:NIO是面向缓冲区的。 数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。

在这里插入图片描述
在这里插入图片描述
如果业务涉及到的异步操作比较多,可以切换至apr模式

简单的理解就是从操作级别解决异步IO问题,大幅度的提高服务器的性能和响应性能,也是Tomcat运行高并发应用的首选模式。从Tomcat 7.0.30开始,Tomcat默认支持apr。

apr模式

在win平台上开启apr

1,下载apr相关的文件
点击链接下载

2,复制对应的tcnative-1.dll文件到tomcat安装文件夹下的bin文件夹下;
在这里插入图片描述
3,配置文件—server.xml

在这里插入图片描述
这样基于apr模式的tomcat就启动成功了;

注:apr异步非阻塞也用到了nio

在linux上开启apr

首先下载apr相关的文件
在这里插入图片描述

核心文件点击链接下载

打包下载完整版文件包---->>

之后登陆linux系统,

cd /usr/local/
wget  https://dlcdn.apache.org//apr/apr-1.7.0.tar.gz
 tar -zxf  apr-1.7.0.tar.gz
[root@Gavin local]# cd apr-1.7.0/
[root@Gavin apr-1.7.0]# ls
apr-config.in     CMakeLists.txt  libapr.mak     poll
apr.dep           config.layout   libapr.rc      random
apr.dsp           configure       LICENSE        README
apr.dsw           configure.in    locks          README.cmake
apr.mak           docs            Makefile.in    shmem
apr.pc.in         dso             Makefile.win   strings
apr.spec          emacs-mode      memory         support
atomic            encoding        misc           tables
build             file_io         mmap           test
build.conf        helpers         network_io     threadproc
buildconf         include         NOTICE         time
build-outputs.mk  libapr.dep      NWGNUmakefile  tools
CHANGES           libapr.dsp      passwd         user

开始配置---->>apr

[root@Gavin native]#  ./configure --prefix=/home/Apache/install/apr

make && make install

正常执行结果---->>
在这里插入图片描述
配置apr-util

[root@Gavin local]# tar -zxf apr-util-1.6.1.tar.gz

[root@Gavin local]# cd apr-util-1.6.1/


[root@Gavin local]#./configure --prefix=/home/Apache/install/apr-util -with-apr=/home/Apache/install/apr/bin/apr-1-config

[root@Gavin local]# make && make install

部分结果展示----->>
在这里插入图片描述
配置apr-iconv

[root@Gavin local]#  tar -zxf apr-iconv-1.2.2.tar.gz
[root@Gavin local]# cd apr-iconv-1.2.2
[root@Gavin local]# ./configure --prefix=/home/Apache/install/iconv --with-apr=/home/Apache/install/apr
[root@Gavin local]#  make && make install

注:该配置要与apr 相关联,所以要制定apr地址
正常结果---->>
在这里插入图片描述

其他配置-----如果你需要配置Apache http服务器,请继续往下看;

配置pcre

[root@Gavin local]# tar -zxf pcre-8.40.tar.gz
[root@Gavin local]# cd pcre-8.40/
[root@Gavin local]# ./configure --prefix=/home/Apache/install/pcre

主从安装结果—>>>
在这里插入图片描述
配置httpd

[root@Gavin local]# tar -zxf httpd-2.4.25.tar.gz
[root@Gavin local]#  cd httpd-2.4.25/

[root@Gavin local]#  ../configure --prefix=/home/Apache/install/httpd-2.4.25 --with-apr=/home/Apache/install/apr --with-apr-util=/home/Apache/install/apr-util --with-pcre=/home/Apache/install/pcre

安装结果—>>

在这里插入图片描述

启动Apache:/home/Apache/install/httpd-2.4.25/bin/apachectl start
•停止Apache:/home/Apache/install/httpd-2.4.25/bin/apachectl stop
•重启Apache:/home/Apache/install/httpd-2.4.25/bin/apachectl restart

系统内核参数优化

修改/etc/sysctl.cnf文件,在最后追加如下内容:


 net.core.netdev_max_backlog = 32768
 net.core.somaxconn = 32768
 net.core.wmem_default = 8388608
 net.core.rmem_default = 8388608
 net.core.rmem_max = 16777216
 net.core.wmem_max = 16777216
 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.route.gc_timeout = 100
 net.ipv4.tcp_fin_timeout = 30
 net.ipv4.tcp_keepalive_time = 1200
 net.ipv4.tcp_timestamps = 0
 net.ipv4.tcp_synack_retries = 2
 net.ipv4.tcp_syn_retries = 2
 net.ipv4.tcp_tw_recycle = 1
 net.ipv4.tcp_tw_reuse = 1
 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 65536


保存退出,执行sysctl -p生效

总结—>>>tomcat的优化主要涉及----根据实际需要调整内存,IO量 ,去选择不同的参数,根据并发业务情况选择nio/apr模式;

另一个根据jdk版本不同,内存涉及到的参数会有些变化;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeMartain

祝:生活蒸蒸日上!

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

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

打赏作者

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

抵扣说明:

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

余额充值