Tomcat部署与优化
Tomcat简述
server: 服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个
service:服务,用来组织Engine(引擎)和Connector(连接器,端口)的对应关系,一个service中只有一个Engine
connector:连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine
Engine:即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector
Host:即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分
Context:应用的上下文,配置特定url路径映射和目录的映射关系: url => directory
Tomcat请求过程
-
假设来自客户的请求为: http://localhost:8080/test/index.jsp 浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1Connector获得此请求。
-
Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
-
Engine获得请求192.168.91.100:8080/test/index.jsp,遍历它所有虚拟主机Host
-
Engine匹配到名为localhost的Host。如果匹配不到,就把请求交给该Engine中的defaultHost处理. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
-
Host匹配到路径为/test的Context
-
path=/test的Context获得请求index.jsp,在它的mapping table中寻找对应的servlet
-
Context匹配到URLPATTERN为*.jsp的Sservlet,对应于]spServlet类构造HtpServletRequest对象和HttpServletResponse对象,作为参数调用)spSer let的doGet或doPost方法。
-
Context把执行完了之后的HttpServletResponse对象返回给Host
-
Host把HttpServletResponse对象返回给Engine
-
Engine把HttpServletResponse对象返回给Connector
-
Connector把HttpServletResponse对象返回给浏览器端
Tomcat部署
安装JDK
#关闭防火墙和selinux
systemctl disable firewalld --now
setenforce 0
#将源代码包置于/opt下
apache-tomcat-9.0.16.tar.gz
jdk-8u201-linux-x64.rpm
#安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm
#确定安装路径
rpm -ql jdk1.8 | tail -n 1
cd /usr/java/jdk1.8.0_201-amd64/;ls
#查看JDK版本
java -version
#设置JDK环境变量
vim /etc/profile
#添加环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile#刷新配置文件
#安装Tomcat并用systemd启动
#解压tomcat安装包
cd /opt
tar zxf apache-tomcat-9.0.16.tar.gz
#简化路径,方便管理
mv apache-tomcat-9.0.16 /usr/local/tomcat
#启动Tomcat的方法,省略路径
startup.sh #后台启动tomcat
catalina.sh start #后台启动tomcat
catalina.sh run #前台启动 tomcat
#关闭Tomcat的方法:
shutdown.sh
#查看tomcat是否启动:
netstat ss ps jps
添加到supervisord服务
#安装源和服务
yum install -y epel-release
yum install -y supervisor
#建立管理用户
useradd tomcat
chown -R tomcat:tomcat /usr/local/tomcat
#编辑住配置文件
vim /etc/supervisord.conf
vim /etc/supervisord.d/tomcat.conf
[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run ;程序启动命令
autostart=true ;在supervisord启动的时候也自动启动
startsecs=10 ;启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ;程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ;启动失败自动重试次数,默认是3
user=tomcat ;用哪个用户启动进程,默认是root
priority=999 ;进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ;把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=200MB ;stdout 日志文件大小,默认50MB
stdout_logfile_backups=20 ;stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/var/log/supervisor/logs/catalina.out
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
mkdir -p /var/log/supervisor/logs #创建日志路径
systemctl start supervisord #启动服务
systemctl enable supervisord #开机自启
#启动方式二
#supervisord -c /etc/supervisord.conf
supervisorctl reread #重新加载 Supervisor 的配置
supervisorctl update #应用新的配置
supervisorctl start tomcat
supervisorctl status tomcat
Tomcat的端口和主要目录
Tomcat端口
8080: 默认接收 http 请求的端口
8005: 安全端口,可以关闭tomcat
8009: apache 和 tomcat 联动 AJP 协议
8443:负责处理https请求连接
主要目录
目录名字 | 功能 |
---|---|
bin | 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh |
conf | 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件 |
lib | 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包 |
logs | 存放 Tomcat 日志 |
temp | 存放 Tomcat 运行时产生的文件 |
webapps | 存放项目资源的目录 |
work | omcat 工作目录,一般清除 Tomcat 缓存的时候会使用到 |
conf子目录
文件名 | 说明 |
---|---|
server.xml | 主配置文件 全局生效 |
web.xml | 每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件 |
context.xm | 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件 |
tomcat-users.xml | 用户认证的账号和密码文件 |
catalina.policy | 当使用security选项启动omcat时,用于为tomcat设置安全策略 |
catalina.properties | Tomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数 |
logging.properties | Tomcat日志系统相关的配置,可以修改日志级别和日志路径等 |
Tomcat虚拟机
#创建项目目录和文件
mkdir /usr/local/tomcat/webapps/ck1
mkdir /usr/local/tomcat/webapps/ck2
echo "This is ck1\!" > /usr/local/tomcat/webapps/ck1/index.jsp
echo "This is ck2\!" > /usr/local/tomcat/webapps/xhz/index.jsp
#修改Tomcat主配置文件server.xml
vim /usr/local/tomcat/conf/server.xml
#165行前插入
<Host name="www.a.com" appBase="/usr/local/tomcat/webapps/ck1"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="/usr/local/tomcat/webapps/ck2"
unpackWARs="true" autoDeploy="true">
</Host>
#重新启动
supervisorctl restart tomcat
在本机的hosts文件中添加
192.168.118.30www.a.com www.b.com
Tomcat优化
怎么查看线程数?
ss -natp | grep java 看pid
ps -T -p pid
配置文件优化
maxThreads (最大线程数/并发)
processorCache (进程缓冲)
acceptCount (等待队列数)
enableLookups (关闭DNS反向解析)
URIEncoding (网页字符集编码UTF-8)
maxKeepAliveRequests (长连接最大请求数)
connectionTimeout (连接超时时间)
compression (开启页面压缩)
系统内核优化
/etc/security/limits.conf
nofile
nproc
memlock
/etc/sysct1.conf
net .ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_max_tw_buckets=5000 net.ipv4.ip_local_port_range=1024 65535
JVM优化
选项分类
- -选项名称 此为标准选项,所有HotSpot都支持
- -X选项名称 为稳定的非标准选项
- -XX:选项名称 非标准的不稳定选项,下一个版本可能会取消
参数 | 说明 | 举例 |
---|---|---|
-Xms | 设置应用程序初始使用的堆内存大小(年轻代+老年代) | -Xms2g |
-Xmx | 设置应用程序能获得的最大堆内存早期JVM不建议超过32G,内存管理效率下降 | -Xms4g |
-XX:NewSize | 设置初始新生代大小 | -XX:NewSize=128m |
-XX:MaxNewSize | 设置最大新生代内存空间 | -XX:MaxNewSize=256m |
-Xmnsize | 同时设置-XX:NewSize 和 -XX:MaxNewSize,代 | -Xmn1g |
-XX:NewRatio | 以比例方式设置新生代和老年代 | -XX:NewRatio=2 new/old=1/2 |
-XX:SurvivorRatio | 以比例方式设置eden和survivor(S0或S1) | -XX:SurvivorRatio=6 eden/survivor=6/1 new/survivor=8/1 |
-Xss | 设置每个线程私有的栈空间大小,依据具体线程 | -Xss256k |
|
| -XX:SurvivorRatio | 以比例方式设置eden和survivor(S0或S1) | -XX:SurvivorRatio=6 eden/survivor=6/1 new/survivor=8/1 |
| -Xss | 设置每个线程私有的栈空间大小,依据具体线程 | -Xss256k |