Tomcat的优化及多实例部署

一.Tomcat的优化

tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重新启动,只有通过不断压测优化才能让它高效率稳定的运行,优化主要包括三方面:分别为操作系统优化(内核、参数优化)、tomcat配置文件参数优化、java虚拟机(JVM调优)

1.tomcat启动速度优化——random

第一次启动tomcat可能会发现tomcat启动很慢,默认情况下可能需要几十秒,可以修改jdk参数调优

vim /usr/java/jdk1.8.0-x64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
# 关闭Tomcat 应用程序脚本。
/usr/local/tomcat/bin/shutdown.sh 
#开启Tomcat 应用程序脚本。
/usr/local/tomcat/bin/startup.sh 

random:随机生成数,urandom:关闭随机生成数,会使启动的速度更快

总:jdk默认的使用/dev/random,random采用的是阻塞方式生成随机数,生成的速度很慢

2.Tomcat配置文件参数优化

2.1 常用的优化相关参数

(1)redirectPort

如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口。

8080:tomcat的http默认监听端口

8443:https的默认端口默认不是开启的,开启去生成证书(ssl)

8005:用来关闭tomcat的服务端口,使用shutdown关闭的就是这个端口

8009:连接器的监听端口(负责和其他的http服务器建立连接),把tomcat与其他http服务集成时,就需要用到连接器

(2)maxThreads

Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是 200。(根据Tomcat的请求数量设置)

如tomcat挂了,服务正常起来:最大线程数的问题,查看是否超过了默认值或者自己设置的最大线程数

(3)minSpareThreads

最小空闲线程数,Tomcat启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。

平常设置50-80之间即可,设置的较大会浪费资源

(4)maxSpareThreads

最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。一般不需要指定。
(5)URIEncoding

指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它web服务器软件配置方便,需要分别指定。

一般是utf-8

(6)connectionTimeout

网络连接超时,单位:毫秒,设置为 0

表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。
(7)enableLookups

是否反查域名,以返回远程主机的主机名,取值为: true 或false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。(如不是false会陷入循环)
(8)disableUploadTimeout

上传时是否使用超时机制。应设置为 true。
(9)connectionUploadTimeout

上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
(10)acceptCount

指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。如果超出默认值或者自己设置的值,将会丢弃。
(11)compression

是否对响应的数据进行GZIP压缩,off:表示禁止压缩、 on:表示允许压缩 (文本将被压缩)、force: 表示所有情况下都进行压缩,默认值为:off——压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。

(12)compressionMinSize

表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。

超过默认值才会开启压缩,低于不会压缩

(13)compressableMimeType

压缩类型,指定对哪些类型的文件进行数据压缩。

(14)noCompressionUserAgents=“gozilla,traviata”

对于以下的浏览器,不启用压缩

2.2 优化的配置文件

vim /usr/local/tomcat/conf/server.xml
. . . . . .
#端口
<Connector port="8080" protocol="HTTP/11.1"connectionTimeout="20000"
redirectPort="8443"
--71行--插入
#最小空闲线程数
minSpareThreads="50"
是否反查域名
enableLookups="false"
#上传时是否使用超时机制
disableUploadTimeout="true"
#指定当前所有可以使用处理请求的线程数
acceptCount="300"
#使用线程数来处理接受的每个请求
maxThreads="500"
#系统或程序可以使用 500 MB 的处理器(CPU)缓存空间,以提高程序的运行速度。
processorCache="500"
#指定tomcat容器的URL编码格式
URIEncoding="UTF-8"
#是否对响应的数据进行GZIP压缩
compression="on"
#压缩的最小值
compressionMinSize="2048"
#支持压缩类型
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>

二.Tomcat多实例部署

1.为什么会有tomcat多实例部署

高并发量的话一个tomcat只支持小部分,添加变成多实例部署会支持的更多,解决高并发的情况

多实例部署的时候端口一定要不一样,不然服务无法起来

2.多实例部署图示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwzWU3GE-1688117012593)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630152703830.png)]

3.多实例部署的配置

3.1 安装JDK

关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下

jdk-8u371-linux-x64.rpm
apache-tomcat-8.5.16.tar.gz 
 
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yMnGmzIa-1688117012595)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630153814309.png)]

安装JDK

cd /opt
#先安装jdk
rpm -ivh jdk-8u371-linux-x64.rpm 
#查看Java的版本信息
java -version
rpm -qpl jdk-8u371-linux-x64.rpm

设置JDK环境变量

#使用脚本设置jdk的环境变量
vim /etc/profile.d/java.sh
#指定安装的包所在的路径家目录
export JAVA_HOME=/usr/java/jdk1.8.0-x64
#将 CLASSPATH 变量设置为当前目录、$JAVA_HOME/lib/tools.jar 和 $JAVA_HOME/lib/dt.jar 所代表的 Java 类文件搜索路径。
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#指定变量,放入执行文件
export PATH=$JAVA_HOME/bin:$PATH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHkRdBcQ-1688117012596)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630154124316.png)]

#读取脚本
source /etc/profile.d/java.sh
java -version

测试jdk是否安装成功

vim hello.java
public class hello {			
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FAI6xiR-1688117012597)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630154443076.png)]

3.2 安装启动Tomcat

cd /opt
tar zxvf apache-tomcat-8.5.16.tar.gz 
mkdir /usr/local/tomcat
mv apache-tomcat-8.5.16.tar.gz /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

#启动tomcat #
#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start
	
#前台启动
/usr/local/tomcat/bin/catalina.sh run	
netstat -natp | grep 8080

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j1b3ZFAj-1688117012598)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630155141716.png)]

3.3 配置 tomcat 环境变量

vim /etc/profile.d/tomcat.sh

#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1export CATALINA_BASE1=/usr/local/tomcat/tomcat1export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2export CATALINA_BASE2=/usr/local/tomcat/tomcat2export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
source /etc/profile.d/tomcat.sh 

3.4 修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

首先检查local目录下是否已经有tomcat的文件,然后根据标准路径修改配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NOeSFteK-1688117012599)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630161253215.png)]

vim /usr/local/tomcat2/conf/server.xml 
<Server port="8006"shutdown="SHOTDOWN">修改为8006port="8081" protocol="HTTP/1.1"<Connector默认为8080 -> 修改为8081<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
#22行,修改Server prot,默认为8005 ->
#69行,修改Connector port,HTTP/1.1

第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的web应用时使用的就是这个连接器。第二个连接器默认监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

3.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

vim /usr/local/tomcat1/bin/startup.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
#添加以下的内容
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1


vim /usr/local/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
#添加以下的内容
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
vim /usr/local/tomcat2/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
#添加以下的内容
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/romcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
vim /usr/local/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/romcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

3.6 启动各 tomcat 中的 /bin/startup.sh

/usr/local/tomcat1/bin/startup.sh
/usr/local/tomcat2/bin/startup.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VGiRZKwH-1688117012599)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630163426655.png)]

#因为启动调用的是java,所以查的是java
netstat -natp | grep java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXwUF9Wy-1688117012600)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630163539627.png)]

3.7 浏览器访问测试

http://192.168.198.13:8080/

http://192.168.198.13:8081/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0TDjY0A-1688117012600)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630163716659.png)]

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JwnjP1jV-1688117012601)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630163735226.png)](https://img-blog.csdnimg.cn/7e04d00055c740d7a156182cfeeb3779.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1PHfCGU-1688117012601)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630170012547.png)]

查看线程数

ps -aT | grep -c java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t2YP11tt-1688117012601)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630163850749.png)]

三.扩展优化jvm

/bin/catalina.shserver:jvm的server工作模式,对应的有client工作模式。使用"java-version”可以查看当前工作模式
-Xms1024m:初始Heap大小,使用的最小内存-Xmx1024m: Java heap最大值,使用的最大内存。

经验:设置Xms大小等于Xmx大小-XX:NewSize=512m:表示新生代初始内存的大小,应该小于 -Xms的值-XX:MaxNewSize=1024M: 表示新生代可被分配的内存的最大上限,应该小于 -Xmx的值-xX:PermSize=1024m: 设定内存的永久保存区域,内存的永久保存区域,VM 存放CLass 和 Meta信息,JVM在运行期间不会清除该区域-XX:MaxPermsize=1024m: 设定最大内存的永久保存区域。经验:设置PermSize大小等于MaxPermSize大小、-XX:+DisableExplicitGC:自动将System.qc() 调用转换成一个空操作,即应用中调用System.qc()会变成一个空操作,避免程序员在代码里进行System.gc()这种危险操作。System.gc()除非是到了万不得也的情况下使用,都应该交给 JVM。

优化总结:

(1)提高tomcat效率:radom修改uradom启动速度

(2)连接器支持协议

(3)最大并发连接数:默认200,一般100,根据请求数量

(4)线程数最小空闲(默认值10),最大备用线程数(一般不指定)

(5)tomcat URL编码格式,需要自己设置:utf-8

(6)tomcat网络连接超时,默认值200s即可

(7)是否反查域名,false设置false为了提高处理能力

(8)tomcat超时机制,应为true,一定要开启,设置超时时间

(9)tomcat对数据是否进行压缩,on允许压缩,压缩大小默认2048,超过2048才会压缩

(10)tomcat对哪些类型的文件进行压缩(image、jpg、text、html、png)

猜你喜欢

转载自blog.csdn.net/Katie_ff/article/details/131481067