Tomcat部署及优化

目录

一、Tomcat介绍

1)tomcat应用场景

2)tomcat的结构

二、tomcat的部署

1)初始化操作

2)安装JDK环境

3)安装 Tomcat 软件包

 4)管理tomcat服务

5)supervisor管理程序

 三、tomcat优化

1)内核参数优化

2)Tomcat配置文件参数优化

3)JVM(java虚拟机)优化

4)tomcat启动速度优化

四、tomcat 的虚拟主机配置

五、tomcat 的多实例部署(service)


一、Tomcat介绍

        Tomcat是java开发的一款免费的、开源的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发好测试JSP程序的首选。tomcat可以作为web服务器,处理静态html页面请求,但能力非常一般(只有nginx的六分之一);还可以作为servlet或JSP容器,处理java语言开发的JSP动态网页程序,并作为中间件实现前端web和后端数据库的协同工作,单独运行在后端,这也是tomcat的主要应用场景。

1)tomcat应用场景

  • 作为web服务器,处理用户静态html页面请求,但性能远不及apache和nginx(只有nginx的六分之一);
  • 作为servlet/JSP容器,JSP容器将java语言开发的JSP动态网页程序翻译成servlet代码交给servlet容器,并作为中间件实现前端web和后端数据库的协同工作,单独运行在后端。

2)tomcat的结构

  • Server:一个Tomcat服务器只有一个server,一个Server可以管理多个service实例,各 Service 之间相互独立。
  • Service:核心组件分别是 ConnectorContainer。
  • Connector:每个service服务可能有一个多个connector连接器,它是Tomcat与外界的交通枢纽,作用是暴露监听端口,接收客户端发来的请求并传递给engine容器,传递响应消息给客户端,多个connector连接器都对应同一个前台engine。
  • Container:作为Service的另一个核心组件,其主要作用是处理用户请求的业务逻辑。按照层级有Engine,Host,Context,Wrapper四种子容器,用于管理和调用 Servlet 相关逻辑。
  • Engine:一个Service只有一个Engine,根据请求的主机名/域传递给对应的虚拟主机host容器,一个engine对应管理多个虚拟主机;
  • Host:Host的元素定义了一个虚拟主机,根据请求URL路径传递给对应的context容器,host下可以对应多个虚拟机,每个虚拟主机可以管理多个web应用;
  • Context:Context代表一个web应用,作用是运行web网页程序,一个context对应一个web应用,封装多个servlet封装器;
  • Wrapper:Wrapper封装器位于容器最底层,每个Wrapper封装一个servlet,servlet会根据程序代码执行业务逻辑(负责对象实例的创建、执行和销毁)。

二、tomcat的部署

1)初始化操作

[root@centOS2 ~]# setenforce 0
[root@centOS2 ~]# systemctl stop firewalld
[root@centOS2 ~]# systemctl disable --now firewalld
[root@centOS2 ~]# vim /etc/selinux/config 

2)安装JDK环境

        在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。虚拟机安装系统时我选择的是桌面系统+开发工具,是默认装了jdk的,但生产环境中通常都是最小化安装,需要手动安装jdk环境。安装方法一:在线源或本地yum源都可以安装jdk包yum install -y java-1.8.0*,方法二是官方下载软件包解压安装Java Downloads | Oracle,根据自己的架构安装(hostnamectl查看)。rpm包和tar包安装方式基本相同,唯一区别是路径不同,rpm安装会自动解压到/usr/lib/jvm中;tar包可以自己指定安装目录,可以移动到/usr/local/目录中。java -version查看系统有没有安装

 

[root@centOS2 ~]# cd /opt/
[root@centOS2 opt]# rm -rf *
[root@centOS2 opt]# ls
[root@centOS2 opt]# rz -E
[root@centOS2 opt]# ls
jdk-8u391-linux-x64.rpm  jdk-8u391-linux-x64.tar.gz
[root@centOS2 opt]# tar xf jdk-8u391-linux-x64.tar.gz 
[root@centOS2 opt]# ls
jdk1.8.0_391  jdk-8u391-linux-x64.rpm  jdk-8u391-linux-x64.tar.gz
[root@centOS2 opt]# mv jdk1.8.0_391/ /usr/local/
[root@centOS2 opt]# cd /usr/local/jdk1.8.0_391/
[root@centOS2 jdk1.8.0_391]# ls
bin        include         jmc.txt  jvisualvm.txt  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  javafx-src.zip  jre      legal          LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
[root@centOS2 jdk1.8.0_391]# cd bin/
[root@centOS2 bin]# ls
appletviewer  jarsigner       javah         jcmd      jhat   jrunscript  keytool       rmic         servertool  xjc
ControlPanel  java            javap         jconsole  jinfo  jsadebugd   native2ascii  rmid         tnameserv
extcheck      javac           javapackager  jcontrol  jjs    jstack      orbd          rmiregistry  unpack200
idlj          javadoc         java-rmi.cgi  jdb       jmap   jstat       pack200       schemagen    wsgen
jar           javafxpackager  javaws        jdeps     jps    jstatd      policytool    serialver    wsimport

bin:包含java的运行命令,javac编译命令

jre/bin:包含java的运行和编译环境,也有一些执行程序,也有一些jar包

lib:录包含一些jar包,是开发程序运行过程中使用的工具包

需要把jdk1.8.0_391/bin/目录和jdk1.8.0_391/jre/bin/目录加入到path环境变量中,再编写一个java运行的环境变量classpath,指定java两个lib目录,让java运行程序过程中能自动加载它的jar包工具包。

[root@centOS2 bin]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_391    #java的家目录,jdk是开发工具
export JRE_HOME=$JAVA_HOME/jre              #jre是java的运行环境
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib    #java的运行环境
export PATH=$JAVA_HOME/bin:/$JRE_HOME/bin:$PATH    #加入环境变量中,注意放到PATH环境变量的左边,因为环境变量是从左往右读取,如果系统自带jdk工具这样就会执行的是新安装的jdk工具
[root@centOS2 bin]# source /etc/profile
[root@centOS2 bin]# java -version
java version "1.8.0_391"
Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)

CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
tools.jar:是系统用来编译一个类的时候用到的,即执行javac的时候用到,比如可用来编译JSP文件。
dt.jar:是关于运行环境的类库,主要是swing的包,在用到swing时最好加上。

 验证java环境是否有效,创建一个java源代码文件,javac编译生成字节码文件,java运行获得输出结果

[root@centOS2 bin]# cd
[root@centOS2 ~]# vim hello.java
public class hello {                               #指定类名跟文件名保持一致
        public static void main(String[] args){    #主方法
        System.out.println("Hello World");         #打印输出内容
        }
}
[root@centOS2 ~]# javac hello.java
[root@centOS2 ~]# ls
anaconda-ks.cfg  hello.class  hello.java  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面                                    #hello.class为java字节码文件

#运行java文件
[root@centOS2 ~]# java hello
Hello World

3)安装 Tomcat 软件包

●bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh、startup.sh、shutdown.sh 
●conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml 
●lib:存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
●logs:存放 Tomcat 执行时的日志
●temp:存放 Tomcat 运行时产生的文件
●webapps:存放 Tomcat 默认的 Web 应用项目资源的目录
●work:Tomcat 的工作目录,存放 jsp 编译后产生的 class 文件

[root@centOS2 ~]# cd /opt/
[root@centOS2 opt]# ls
jdk-8u391-linux-x64.rpm  jdk-8u391-linux-x64.tar.gz
[root@centOS2 opt]# rz -E

[root@centOS2 opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u391-linux-x64.rpm  jdk-8u391-linux-x64.tar.gz
[root@centOS2 opt]# tar xf apache-tomcat-9.0.16.tar.gz 
[root@centOS2 opt]# ls
apache-tomcat-9.0.16  apache-tomcat-9.0.16.tar.gz  jdk-8u391-linux-x64.rpm  jdk-8u391-linux-x64.tar.gz
[root@centOS2 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat
[root@centOS2 opt]# cd /usr/local/tomcat/
[root@centOS2 tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@centOS2 tomcat]# cd bin/
[root@centOS2 bin]# ls
bootstrap.jar       ciphers.sh                    daemon.sh     setclasspath.bat  startup.sh            version.bat
catalina.bat        commons-daemon.jar            digest.bat    setclasspath.sh   tomcat-juli.jar       version.sh
catalina.sh         commons-daemon-native.tar.gz  digest.sh     shutdown.bat      tomcat-native.tar.gz
catalina-tasks.xml  configtest.bat                makebase.bat  shutdown.sh       tool-wrapper.bat
ciphers.bat         configtest.sh                 makebase.sh   startup.bat       tool-wrapper.sh     

 4)管理tomcat服务

#后台运行tomcat
[root@centOS2 bin]# ./startup.sh                
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@centOS2 bin]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      66083/java

 此时浏览器能够正常访问tomcat服务器了

#关闭tomcat服务器
[root@centOS2 bin]# ./shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@centOS2 bin]# netstat -lntp | grep 8080

tomcat开发时作者是以妻子的名字catalina命名的,bin目录中有个catalina.sh也可以用来前台或后台启动tomcat。这里补充一下,容器技术还有一些管理进程的应用是要求前台启动程序的,所以也需要掌握一些前台启动的方法

#前台启动tomcat
/usr/local/tomcat/bin/catalina.sh run
#前台启动nginx
/usr/local/nginx/sbin/nginx -g "daemon off;"

#将tomcat设置成systemctl的管理服务
[root@centOS2 bin]# cd /usr/lib/systemd/system
[root@centOS2 system]# vim tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking        #后台启动
Environment="JAVA_HOME=/usr/local/jdk1.8.0_391"       #jdk环境变量,与jdk部分保持统一
Environment="JRE_HOME=JRE_HOME=$JAVA_HOME/jre"
Environment="PATH=$JAVA_HOME/bin:$JRE_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]       #设置开机启动的运行级别
WantedBy=multi-user.target

[root@centOS2 system]# systemctl restart tomcat.service

5)supervisor管理程序

生产环境中还可以使用supervisor管理服务的启停,还可以自动拉起意外退出的程序。yum安装的supervisor会在/etc/会生成一个supervisor.conf文件及一个supervisor.d文件目录

#在线yum源安装依赖包和suoervisor
[root#@centOS2 system]# cd /etc/yum.repos.d/
[root@centOS2 yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo          repo.bak
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  CentOS-x86_64-kernel.repo      
[root@centOS2 yum.repos.d]# yum install -y epel-release 
[root@centOS2 yum.repos.d]# yum install -y suoervisor

#修改supervisor配置文件
[root@centOS2 yum.repos.d]# vim /etc/supervisord.conf 
128 [include]
129 #files = supervisord.d/*.ini
130 files = supervisord.d/*.conf
[root@centOS2 yum.repos.d]# systemctl restart supervisord.service

#创建supervisor管理的tomcat的子配置文件
[root@centOS2 yum.repos.d]# cd /etc/supervisord.d/
[root@centOS2 supervisord.d]# vim tomcat.conf
[root@centOS2 supervisord.d]# systemctl restart supervisord.service 

#supervisoctl管理tomcat服务
[root@centOS2 supervisord.d]# supervisorctl stop tomcat
tomcat: stopped

启动supervisord服务有两种方式,一是systemctl启动;二是supervisord -c /etc/supervisor.conf 启动,如果supervisord服务已经用systemctl开启了,再使用supervisord -c会报错。关闭supervisord管理的服务,直接systemctl关闭supervisord即可

 三、tomcat优化

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

1)内核参数优化

之前nginx篇章中提到过,主要/etc/sysctl.cnf内核参数文件优化和/etc/secrit/limit.cnf内核限制文件。

/etc/sysctl.conf   内核参数配置文件
#用于解决系统存在大量TIME WAIT状态连接的问题
net.ipv4.tcp_syncookies=1        表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
net.ipv4.tcp_tw_reuse=1          表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle=1        表示开启TCP连接中TIME-WAIT sockets的快速回收;但是不建议用,会产生其他问题。
net.ipv4.tcp_fin_timeout=30      修改MSL值,系统默认的TIMEOUT时间

#如果连接数本身就很多,可再优化TCP的可用端口范围,进一步提升服务器的并发能力
net.ipv4.tcp_keepalive_time=1200           #当keepalive启用时,TCP发送keepalive探测消息的频率,确认客户端是否断网
net.ipv4.ip_local_port_range=1024 65535    #用于向外连接的端口范围。缺省情况下很小,为32768 60999
net.ipv4.tcp_max_syn_backlog=8192          #SYN队列长度,默认为1024,加大队列长度为8192,可容纳更多等待连接的网络连接数
net.ipv4.tcp_max_tw_buckets=5000           #表示系统同时保持TIME WAIT的最大数量
net.core.somaxconn=65535                   #一个端口能够监听的最大连接数

#如果需要IP路由转发

net.ipv4.ip_forward=1

/etc/security/limits.conf   内核资源限制文件
*     soft        noproc            65535         打开系统进程数
*     hard      noproc            65535
*     soft        nofile            65535         进程打开文件数
*     hard      nofile            65535

2)Tomcat配置文件参数优化

常用的优化相关参数
【redirectPort】如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的 8443 端口。

maxThreads】最大并发连接数/最大线程数,一个tomcat最大并发量为1000;

minSpareThreads】最小空闲线程数,通常为100;

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

processorCache】进程缓冲数,一般采用maxThreads的值或者-1。

URIEncoding】指定网页字符集编码,通常为UTF-8;

connnectionTimeout】网络连接保持时间,通常为20000或30000毫秒;

enableLookups】关闭DNS反向查询,设置为 false,直接返回 IP 地址,提高处理能力;

disableUploadTimeout】上传时是否使用超时机制。应设置为 true。

【connectionUploadTimeout】设置ture关闭上传超时,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

acceptCount】设置队列等待数,小于maxthreads的值;

【maxKeepAliveRequests】指定一个长连接的最大请求数,通常为100;

compression】网页压缩,通常设置为on开启;

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

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

【noCompressionUserAgents="gozilla, traviata"】对于以下的浏览器,不启用压缩
#如果已经进行了动静分离处理,静态页面和图片等数据就不需做 Tomcat 处理,也就不要在 Tomcat 中配置压缩了。

以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习。

[root@centOS2 ~]# vim /usr/local/tomcat/conf/server.xml
[root@centOS2 ~]# systemctl restart tomcat.service 

3)JVM(java虚拟机)优化

java的代码运行实在jvm上面运行的,jvm的性能决定着java应用程序的运行效率、性能和稳定性,所以需要对JVM做一些优化。jvm的优化的配置在tomcat的bin目录下catalina.sh文件的119行"cygwin=false"前添加 JAVA_OPTS 参数配置。

[root@centOS2 ~]# vim /usr/local/tomcat/bin/catalina.sh
[root@centOS2 ~]# cd /usr/local/tomcat/bin/
[root@centOS2 bin]# ./shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=1024m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=1024m; support was removed in 8.0
[root@centOS2 bin]# ./startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m -XX:ParallelGCThreads=2 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof"
-server   表示启用JDK的Server模式,使多核服务器CPU性能更佳
-Xms2048m -Xmx2048m    设置JVM堆内存初始值和最大值,设置为一样大,一般为物理内存的1/2,最大不超过32G
设置为一样大的目的为减少GC次数和在java垃圾回收机制清理完堆区内存后不需要重新计算堆区内存的大小而浪费资源               
-XX:PermSize=1024m -XX:MaxPermSize=1024m    设置非堆内存初始值和最大值,设置为一样大,一般为物理内存的1/4
设置为一样大的目的为减少内存伸缩带来的频繁内存申请,从而减少一定的系统开销
-Xmn768m    设置JVM堆内存新生代的大小,一般为堆内存的3/8
-XX:ParallelGCThreads=2    设置并行GC垃圾回收的线程数,提高垃圾回收效率,一般为CPU的数量相同
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof   设置JAVA应用进程发生OOM异常退出进行DUMP备份以及指定DUMP备份文件的保存路径

 

4)tomcat启动速度优化

tomcat启动速度慢很大原因是因为当前系统没有足够的随机数导致运行java程序发生阻塞

#java程序的随机数默认是通过/dev/random获取的,它会出现阻塞问题,改成urandom,重启tomcat服务
[root@centOS2 supervisord.d]# cd /usr/local/jdk1.8.0_391/
[root@centOS2 jdk1.8.0_391]# cd jre/
[root@centOS2 jre]# cd lib/
[root@centOS2 lib]# cd security/
[root@centOS2 security]# ls
blacklist          cacerts      java.security  policy                  trusted.libraries
blacklisted.certs  java.policy  javaws.policy  public_suffix_list.dat
[root@centOS2 security]# vim java.security 
 120 securerandom.source=file:/dev/random   
[root@centOS2 security]#  supervisorctl restart tomcat.service 

四、tomcat 的虚拟主机配置

#tomcat服务会开启三个端口,8080为htp协议的连接器端口,8005为关闭端口,8009叫ajp端口
[root@centOS2 conf]# netstat -lntp | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      69517/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      69517/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      69517/java          

修改server.xml配置文件中host和context部分的配置

[root@centOS2 security]# cd /usr/local/tomcat/conf/
[root@centOS2 conf]# ls
Catalina         catalina.properties  jaspic-providers.xml  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          jaspic-providers.xsd  server.xml          tomcat-users.xsd
[root@centOS2 conf]# vim server.xml 
22 <Server port="8005" shutdown="SHUTDOWN">表示tomcat的关闭端口,使用shutdown。sh关闭tomcat的时候其实就是往8005发送信号;
69 <Connector port="8080" protocol="HTTP/1.1"表示tomcat的htp协议连接器端口。
88  <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"吐过要使用https协议要启用此段配置开启,把"<!--"和"-->"注释标签删掉
116 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />是和apache对接通信用的,一般情况下用不到,可以注释
从119行开始就是容器配置了,一般只用修改host和context部分。默认情况下只有一个host监听本地站点,如果想要监听xy101和xy102可以做如下修改:
164       </Host>  下面添加基于域名的2个站点
165       <Host name="www.xy101.com" appBase="webapps"表示网页程序存放目录 unpackWARs="true"表示通过java编写的web程序打成的var包是否自动打开 autoDeploy="true">表示自动部
166         <Context docBase="/usr/local/tomcat/webapps/xy101"文件路径 path="" 指定为根目录 reloadable="true">允许自动重新加载
167         </Context>
168       </Host>
169       <Host name="www.xy102.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
170         <Context docBase="/usr/local/tomcat/webapps/xy102" path="" reloadable="true">
171         </Context>
172       </Host>

#创建网页目录和文件
[root@centOS2 conf]# mkdir /usr/local/tomcat/webapps/xy101
[root@centOS2 conf]# mkdir /usr/local/tomcat/webapps/xy102
[root@centOS2 conf]# echo 'this is xy101 test web' > /usr/local/tomcat/webapps/xy101/index.html
[root@centOS2 conf]# echo 'this is xy102 test web' > /usr/local/tomcat/webapps/xy102/index.html
[root@centOS2 conf]# supervisorctl restart tomcat
tomcat: stopped
tomcat: started
[root@centOS2 conf]# ps aux | grep tomcat
root      70143  0.6  3.6 3516324 139432 ?      Sl   02:12   0:02 /usr/local/jdk1.8.0_391/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root      70244  0.0  0.0 112824   980 pts/2    R+   02:18   0:00 grep --color=auto tomcat

 在本机的host文件中添加域名解析记录后验证基于域名的主机是否能实现

五、tomcat 的多实例部署(service)

        tomcat适合中低配2核4G或4核8G,但tomcat是单线程多线程模式,是个轻量级且并发请求书最多能跑到1000左右,所以只管理一个实例的话会造成资源浪费,想要跑慢的常规做法是在一台服务器上部署多个tomcat实例。多实例要保证每个tomcat的端口号不能一样,环境参数也需要对应修改。

#关闭已开启的tomcat实例
[root@centOS2 local]# netstat -lntp | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      70143/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      70143/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      70143/java          
[root@centOS2 local]# supervisorctl stop tomcat
tomcat: stopped
[root@centOS2 local]# netstat -lntp | grep java

#3个tomcat实例
[root@centOS2 local]# cd /opt/
[root@centOS2 opt]# tar xf apache-tomcat-9.0.16.tar.gz 
[root@centOS2 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat2
[root@centOS2 opt]# tar xf apache-tomcat-9.0.16.tar.gz 
[root@centOS2 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat3

#修改配置文件中的端口号
[root@centOS2 local]# vim tomcat/conf/server.xml 
[root@centOS2 local]# vim tomcat2/conf/server.xml 
[root@centOS2 local]# vim tomcat3/conf/server.xml 

#启停脚本中添加环境配置
[root@centOS2 opt]# cd /usr/local/
[root@centOS2 local]# ls
bin  etc  games  include  jdk1.8.0_391  lib  lib64  libexec  sbin  share  src  tomcat  tomcat2  tomcat3
[root@centOS2 local]# vim tomcat/bin/shutdown.sh 
[root@centOS2 local]# vim tomcat2/bin/shutdown.sh 
[root@centOS2 local]# vim tomcat3/bin/shutdown.sh 
[root@centOS2 local]# vim tomcat3/bin/startup.sh 
[root@centOS2 local]# vim tomcat2/bin/startup.sh 
[root@centOS2 local]# vim tomcat/bin/startup.sh 
tomcat多实例部署(修改tomcat/conf/server.xml文件)
tomcattomcat2tomcat3
断连端口8005(默认)断连端口8006断连端口8007
连接端口8080(默认)连接端口8081连接端口8082
AJP端口8009(默认)AJP端口8010AJP端口8011
tomcat多实例部署(tomcat/bin/shutdown.sh或startup.sh文件前几行添加)
tomcat

21行 export TOMCAT_HOME=/usr/local/tomcat

22行 export CATALINA_HOME=/usr/local/tomcat
23行 export CATALINA_BASE=/usr/local/tomcat

tomcat221行 export TOMCAT_HOME=/usr/local/tomcat2
22行 export CATALINA_HOME=/usr/local/tomcat2
23行 export CATALINA_BASE=/usr/local/tomcat2
tomcat221行 export TOMCAT_HOME=/usr/local/tomcat3
22行 export CATALINA_HOME=/usr/local/tomcat3
23行 export CATALINA_BASE=/usr/local/tomcat3
#3个tomcat实例同时开启
[root@centOS2 local]# netstat -lntp | grep java
[root@centOS2 local]# ./tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@centOS2 local]# ./tomcat2/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat2
Using CATALINA_HOME:   /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.
[root@centOS2 local]# ./tomcat3/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat3
Using CATALINA_HOME:   /usr/local/tomcat3
Using CATALINA_TMPDIR: /usr/local/tomcat3/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat3/bin/bootstrap.jar:/usr/local/tomcat3/bin/tomcat-juli.jar
Tomcat started.
[root@centOS2 local]# netstat -lntp | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      71231/java          
tcp6       0      0 127.0.0.1:8006          :::*                    LISTEN      71285/java          
tcp6       0      0 127.0.0.1:8007          :::*                    LISTEN      71339/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      71231/java          
tcp6       0      0 :::8010                 :::*                    LISTEN      71285/java          
tcp6       0      0 :::8011                 :::*                    LISTEN      71339/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      71231/java          
tcp6       0      0 :::8081                 :::*                    LISTEN      71285/java          
tcp6       0      0 :::8082                 :::*                    LISTEN      71339/java          

验证

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值