目录
一、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:核心组件分别是 Connector和Container。
- 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文件) | ||
tomcat | tomcat2 | tomcat3 |
断连端口8005(默认) | 断连端口8006 | 断连端口8007 |
连接端口8080(默认) | 连接端口8081 | 连接端口8082 |
AJP端口8009(默认) | AJP端口8010 | AJP端口8011 |
tomcat多实例部署(tomcat/bin/shutdown.sh或startup.sh文件前几行添加) | |
tomcat | 21行 export TOMCAT_HOME=/usr/local/tomcat 22行 export CATALINA_HOME=/usr/local/tomcat |
tomcat2 | 21行 export TOMCAT_HOME=/usr/local/tomcat2 22行 export CATALINA_HOME=/usr/local/tomcat2 23行 export CATALINA_BASE=/usr/local/tomcat2 |
tomcat2 | 21行 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
验证