文章目录
- 一.Tomcat的优化
- 1.tomcat启动速度优化——random
- 2.Tomcat配置文件参数优化
- 2.1 常用的优化相关参数
- 2.2 优化的配置文件
- 二.Tomcat多实例部署
- 1.为什么会有tomcat多实例部署
- 2.多实例部署图示
- 3.多实例部署的配置
- 3.1 安装JDK
- 3.2 安装启动Tomcat
- 3.3 配置 tomcat 环境变量
- 3.4 修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
- 3.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
- 3.6 启动各 tomcat 中的 /bin/startup.sh
- 3.7 浏览器访问测试
- 三.扩展优化jvm
- 总
一.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.多实例部署图示
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
安装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
#读取脚本
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!");
}
}
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
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的文件,然后根据标准路径修改配置
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
#因为启动调用的是java,所以查的是java
netstat -natp | grep java
3.7 浏览器访问测试
http://192.168.198.13:8080/
http://192.168.198.13:8081/
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JwnjP1jV-1688117012601)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230630163735226.png)](https://img-blog.csdnimg.cn/7e04d00055c740d7a156182cfeeb3779.png)
查看线程数
ps -aT | grep -c java
三.扩展优化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)