tomcat优化和多实例部署

397 阅读5分钟

Tomcat优化

Tomcat配置文件参数优化

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

常见的优化相关参数如下:

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" 
processorCache="500"
URIEncoding="UTF-8" 
maxKeepAliveRequests="100"
compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>
【redirectPort】如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的 8443 端口。
【maxThreads】Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是 200。
【minSpareThreads】最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。
【maxSpareThreads】最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。一般不需要指定。
【processorCache】进程缓冲器,可以提升并发请求。默认值是200,如果不做限制的话可以设置为-1,一般采用maxThreads的值或者-1。
【URIEncoding】指定 Tomcat 容器的 URL 编码格式,网站一般采用UTF-8作为默认编码。
【connnectionTimeout】网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。
【enableLookups】是否反查域名,以返回远程主机的主机名,取值为:truefalse,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。
【disableUploadTimeout】上传时是否使用超时机制。应设置为 true。
【connectionUploadTimeout】上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
【acceptCount】指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。
【maxKeepAliveRequests】指定一个长连接的最大请求数。默认长连接是打开的,设置为1时,代表关闭长连接;为-1时,代表请求数无限制
【compression】是否对响应的数据进行GZIP压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。
【compressionMinSize】表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。
【compressableMimeType】压缩类型,指定对哪些类型的文件进行数据压缩。
【noCompressionUserAgents="gozilla, traviata"】对于以下的浏览器,不启用压缩

image.png

Tomcat多实例部署

就是在一台机子上有多个tomcat服务

当需要用到的数据量太大时候一台tomcat服务是不满足的,所以需要多个tomcat服务去运行动态页面

思路

  1. 安装好jdk(前一章有讲过)
  2. 安装Tomcat
  3. 配置Tomcat环境变量
  4. 修改Tomcat2中的server.xml文件,要每个Tomcat实例配置不能有重复的端口号
  5. 修改每个Tomcat实例中的startup.sh和shutdown.sh文件,添加Tomcat环境变量
  6. 启动各Tomcat中的/bin/startup.sh
  7. 浏览器访问测试

1,安装JDK

image.png

2. 安装Tomcat

首先将tomcat的压缩包下载到opt目录下
cd /opt
#切换目录
tar zxvf apache-tomcat-9.0.16.tar.gz
#解压apache-tomcat-9.0.16.tar.gz包
mkdir /usr/local/tomcat
#创建一个tomcat文件夹
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
#将解压的tomcat移动到创建的目录下的tomcat1中
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
#在保留tomcat1属性的情况下拷贝一份并改名为tomcat2

image.png

image.png

3. 配置Tomcat环境变量

vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

source /etc/profile.d/tomcat.sh
#刷新环境变量文件

image.png

image.png

4. 修改Tomcat2中的server.xml文件,要每个Tomcat实例配置不能有重复的端口号

vim /usr/local/tomcat/tomcat2/conf/server.xml
#编辑tomcat2中的server.xml文件
<Server port="8006" shutdown="SHUTDOWN">
#22行,修改Server prot,默认为8005 -> 修改为8006为了避免和tomcat1重复
<Connector port="8081" protocol="HTTP/1.1"
#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081,也是为了避免和tomcat1重复
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />	
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器默认监听8009端口,AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口。

image.png image.png

image.png

image.png

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

#####tomcat1
vim /usr/local/tomcat/tomcat1/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1

#####tomcat2
vim /usr/local/tomcat/tomcat2/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

image.png

image.png

image.png

image.png

image.png

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

/usr/local/tomcat/tomcat1/bin/startup.sh 
#启动tomcat1
/usr/local/tomcat/tomcat2/bin/startup.sh 
#启动tomcat2
netstat -natp | grep java
#过滤出java进程

image.png

image.png

7.浏览器访问测试

访问需要ip地址+端口号

http://192.168.42.13:8080
#访问8080端口的Tomcat1
http://192.168.42.13:8081
#访问8081端口的Tomcat2

image.png

image.png