网站建设就业培训,江苏省建设部网站,大兴区企业网站建设,搜索排名的影响因素Tomcat 一、什么是Tomcat?二、Tomcat 核心组件2.1 Tomcat 组件2.3 Container组件的结构2.4 Tomcat 请求过程 三、Tomcat 部署3.1 安装JDK3.2 设置JDK环境变量3.3 安装Tomcat并用supervisor启动解压添加到supervisord服务测试能否通过supervisorctl启动 四、Tomcat的端口和主要… Tomcat 一、什么是Tomcat?二、Tomcat 核心组件2.1 Tomcat 组件2.3 Container组件的结构2.4 Tomcat 请求过程 三、Tomcat 部署3.1 安装JDK3.2 设置JDK环境变量3.3 安装Tomcat并用supervisor启动解压添加到supervisord服务测试能否通过supervisorctl启动 四、Tomcat的端口和主要目录4.1 Tomcat端口4.2 主要目录 五、Tomcat虚拟主机5.1 为什么要用虚拟主机5.2 配置虚拟主机基于域名 六、Tomcat优化6.1 配置文件优化6.2 系统内核优化6.3 JVM优化 一、什么是Tomcat?
Tomcat服务器是Java语言开发的免费的开放源代码的Web应用服务器。 Tomcat处理静态HTML的能力远不及Apache或者Nginx通常是作为一个Servlet和JSP容器单独运行在后端。
二、Tomcat 核心组件
2.1 Tomcat 组件 Tomcat的核心功能组件有两个
负责接收和反馈外部请求的连接器Connector
负责处理请求的容器Container。
其中连接器和容器相辅相成一起构成了基本的web服务Service。
Connector:暴露监听端口接收客户端发来的请求和返回响应消息给客户端
Container : 负责处理用户请求的业务逻辑。由4个子容器组成(engine、host、context、wrapper)子容器之间是父子关系
2.3 Container组件的结构 Container 结构分析 每个Service会包含一个Container容器。在Container内部包含了4个子容器4个子容器的作用 Engine引擎用来管理多个虚拟主机一个Service最多只能有一个Engine Host代表一个虚拟主机也可以叫站点通过配置Host就可以添加站点 Context代表一个Web应用包含多个Servlet封装器 Wrapper封装器容器的最底层。每一Wrapper封装着一个Servlet负责对象实例的创建、执行和销毁功能。
Engine、Host、Context 和 Wrapper这四个容器之间属于层层递进的父子关系
engine: 引擎管理多个虚拟主机一个container只有一个engine
host: 代表一个虚拟主机
context: 管理web应用的路径
servlet封装器负责处理业务逻辑wrapper:
2.4 Tomcat 请求过程
客户端请求过程
客户端浏览器—— connector ——container(engine)——host ——context——wrapper
container(engine) 根据域名发送给对应的虚拟主机 host 根据用户访问的URL路径 context 根据URL路径对应的Web应用 wrapper 根据应用程序处理业务逻辑
三、Tomcat 部署
3.1 安装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 - bin: 存放 Java 可执行文件的目录
- include: 存放 Java 开发头文件的目录
- jre: 存放 Java 运行时环境的目录
- LICENSE: JDK 许可证文件
- README.html: JDK 的直观说明文档HTML 格式
- src.zip: JDK 的源代码压缩包
- THIRDPARTYLICENSEREADME.txt: 第三方许可证文档
- COPYRIGHT: JDK 的版权信息
- javafx-src.zip: JavaFX 源代码压缩包
- lib: 存放 JDK 和 JavaFX 库文件的目录
- man: 存放 JDK 手册页man page文件的目录
- release: JDK 的版本信息
- THIRDPARTYLICENSEREADME-JAVAFX.txt: JavaFX 第三方许可证文档java -version
#JDK版本3.2 设置JDK环境变量
#查看全局配置文件
vim /etc/profilevim /etc/profile.d/java.shexport JAVA_HOME/usr/java/jdk1.8.0_201-amd64
export JRE_HOME$JAVA_HOME/jre
export CLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#最左原则:linux查找可执行文件是根据PATH变量从左往右查找找到即停止。
#所以需要将安装版本的路径放在$PATH前面CLASSPATH 是一个环境变量用于指定 Java 程序运行时的类路径。类路径是指计算机中存储 Java 类文件和库文件的路径。当 Java 程序运行时虚拟机会搜索类路径上指定的路径以找到所需的类文件和库文件以便正确加载和执行程序。#CLASSPATH和 PATH是必需的而JAVA_HOME和JRE_HOME是为了方便修改只需要修改JAVA_HOMEsource /etc/profile.d/java.shjava -version#查看JDK版本测试 找一个java脚本测试java是否安装成功javac HelloWorld.java #编译java -cp . HelloWorld #执行#补充
---------------------------------小知识-------------------------------------------------------------------
JDK java development kit java开发工具
JRE java runtime environment java运行时环境
JVM java virtuak machine java虚拟机使java程序可以在多种平台上运行class文件。
CLASSPATH告诉jvm要使用或执行的class放在什么路径上便于JVM加载class文件。
tools.jar是系统用来编译一个类的时候用到的即执行javac的时候用到。
dt.jardt.jar是关于运行环境的类库主要是swing包。
----------------------------------------------------------------------------------------------------------
3.3 安装Tomcat并用supervisor启动
解压
#解压tomcat安装包
cd /opt
tar zxf apache-tomcat-9.0.16.tar.gz #将源码包目录拷贝至/usr/local/下并重命名为tomcat
#简化路径方便管理
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#查看tomcat是否启动
netstat ss ps jps添加到supervisord服务 supervisor简介 supervisor是Python开发的c/s服务是Linux系统下的进程管理工具。
可以监听、启动、停止、重启一个或多个进程。
用supervisor管理的进程当一个进程意外被杀死supervisor监听到进程死后会自动将它重启很方便的做到进程的自动恢复的功能不在需要自己写脚本来控制。
#supervisor常用命令
#supervisorctl是supervisord的命令行工具supervisorctl status 查看所有进程的状态supervisorctl stop name 停止进程supervisorctl start name 启动进程supervisorctl restart name 重启进程supervisorctl update 配置文件修改后可以使用该命令加载新的配置supervisorctl reload 重载supervisor不能监控后台进程command不能为后台运行命令 配置部分 #安装源和服务
yum install -y epel-release
yum install -y supervisor#建立管理用户
useradd tomcat
chown -R tomcat:tomcat /usr/local/tomcat#编辑主配置文件
vim /etc/vim /etc/etc/supervisord.d/tomcat.conf[program:tomcat]
command/usr/local/tomcat/bin/catalina.sh run ;程序启动命令
autostarttrue ;在supervisord启动的时候也自动启动
startsecs10 ;启动10秒后没有异常退出就表示进程正常启动了默认为1秒
autorestarttrue ;程序退出后自动重启,可选值[unexpected,true,false]默认为unexpected表示进程意外杀死后才重启
startretries3 ;启动失败自动重试次数默认是3
usertomcat ;用哪个用户启动进程默认是root
priority999 ;进程启动优先级默认999值小的优先启动
redirect_stderrtrue ;把stderr重定向到stdout默认false
stdout_logfile_maxbytes200MB ;stdout 日志文件大小默认50MB
stdout_logfile_backups20 ;stdout 日志文件备份数默认是10
; stdout 日志文件需要注意当指定目录不存在时无法正常启动所以需要手动创建目录supervisord 会自动创建日志文件
stdout_logfile/var/log/supervisor/logs/catalina.out
stopasgroupfalse ;默认为false进程被杀死时是否向这个进程组发送stop信号包括子进程
killasgroupfalse ;默认为false向进程组发送kill信号包括子进程#无释义版
[program:tomcat]
command/usr/local/tomcat/bin/catalina.sh run
autostarttrue
startsecs10
autorestarttrue
startretries3
usertomcat
priority999
redirect_stderrtrue
stdout_logfile_maxbytes200MB
stdout_logfile_backups20
stdout_logfile/var/log/supervisor/logs/catalina.out
stopasgroupfalse
killasgroupfalsemkdir -p /var/log/supervisor/logs #创建日志路径systemctl start supervisord #启动服务
systemctl enable supervisord #开机自启#启动方式二
#supervisord -c /etc/supervisord.conf supervisorctl reread #重新加载 Supervisor 的配置
supervisorctl update #应用新的配置测试能否通过supervisorctl启动
supervisorctl start tomcat
supervisorctl status tomcat浏览器访问Tomcat的默认主页 http://192.168.2.100:8080四、Tomcat的端口和主要目录
4.1 Tomcat端口
8080 默认接收 http 请求的端口
8005 安全端口可以关闭tomcat
8009 apache 和 tomcat 联动 AJP 协议
8443负责处理https请求连接
4.2 主要目录
目录名字功能bin存放启动和关闭 Tomcat 的脚本文件比较常用的是 catalina.sh、startup.sh、shutdown.shconf存放 Tomcat 服务器的各种配置文件比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。lib存放 Tomcat 服务器的 jar 包一般不作任何改动除非连接第三方服务比如 redis那就需要添加相对应的 jar 包logs存放 Tomcat 日志temp存放 Tomcat 运行时产生的文件webapps存放项目资源的目录workTomcat 工作目录一般清除 Tomcat 缓存的时候会使用到
文件名说明server.xml主配置文件web.xml每个webapp只有“部署后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件tomcat-users.xml用户认证的账号和密码文件catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略catalina.propertiesTomcat环境变量的配置,用于设定类加载器路径以及一些与JVM调优相关参数logging.propertiesTomcat日志系统相关的配置可以修改日志级别和日志路径等注意配置文件对于大小写敏感
五、Tomcat虚拟主机
5.1 为什么要用虚拟主机
可能有时候公司会有多个项目需要运行那么肯定不可能是一台服务器上运行多个Tomcat 服务这样会消耗太多的系统资源。此时就需要使用到 Tomcat 虚拟主机。
5.2 配置虚拟主机基于域名 配置思路 例如现在新增两个域名 www.byyb.comwww.byyd.com
希望通过这两个域名访问到不同的项目内容。
1)在 webapps 日录中添加各个站点的网页根目录准备测试页面文件。
2)修改 tomcat 主配置文件 server.xml
在 Engine 配置段下面添加多 Host 配置段设置不同的虚拟主机配置参数
在 Host 配置段下添加一个或多个 context 配置段设置虚拟主机的web应用程序的存放位置。
docBase/usr/local/tomcat/webapps/ky31 pathnhttp://www.ky31.com:8080/test/abc.html - /usr/local/tomcat/webapps/ky31/test/abc.htmldocBase/usr/local/tomcat/webapps/ky31 pathtesthttp://www.ky31.com:8080/test/abc.html - /usr/local/tomcat/webapps/ky31/abc.html具体配置 1.创建 byyb 和 byyd 项目目录和文件 mkdir /usr/local/tomcat/webapps/byyb
mkdir /usr/local/tomcat/webapps/byydecho This is byyb\! /usr/local/tomcat/webapps/byyb/index.jspecho This is byyd\! /usr/local/tomcat/webapps/byyd/index.jsp2.修改 Tomcat 主配置文件 server.xml vim /usr/local/tomcat/conf/server.xml#165行前插入
Host namewww.kgc.com appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalseContext docBase/usr/local/tomcat/webapps/byyb path reloadabletrue /
/HostHost namewww.byyd.com appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalseContext docBase/usr/local/tomcat/webapps/byyd path reloadabletrue /\
/Host ##注释##
Host
name主机名
appBaseTomcat程序工作目录即存放web应用程序的目录相对路径为webapps绝对路径为 /usr/local/tomcat/webapps
unpackWARs在启用此webapps时是否对WAR格式的归档文件先进行展开默认为true
autoDeploy在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy默认为true
xmlValidation是否验证xml文件执行有效性检验的标志
xmlNamespaceAware是否启用xml命名空间设置该值与xmlValidation为true表示对web.xml文件执行有效性检验Context
docBase相应的Web应用程序的存放位置也可以使用相对路径起始路径为此Context所属Host中appBase定义的路径
path相对于Web服务器根路径而言的URI如果为空则表示为此webapp的根路径 /
reloadable是否允许重新加载此context相关的Web应用程序的类默认为false
## #重新启动
supervisorctl restart tomcatecho 192.168.2.100 www.byyb.com www.byyd.com /etc/hosts3.浏览器访问验证 #使用虚拟机的浏览器访问windows需要修改本地hosts文件
浏览器访问 http://www.byyb.com:8080/
浏览器访问 http://www.byyd.com:8080/ 六、Tomcat优化
怎么查看线程数
ss -natp | grep java 看pid
ps -T -p pid
6.1 配置文件优化
maxThreads (最大线程数/并发)
processorCache (进程缓冲)
acceptCount (等待队列数)
enableLookups (关闭DNS反向解析)
URIEncoding (网页字符集编码UTF-8)
maxKeepAliveRequests (长连接最大请求数)
connectionTimeout (连接超时时间)
compression (开启页面压缩
6.2 系统内核优化
/etc/security/limits.conf
nofile
nproc
memlock/etc/sysct1.conf
net .ipv4.tcp_tw_reuse1
net.ipv4.tcp_tw_recycle1
net.ipv4.tcp_fin_timeout30
net.ipv4.tcp_max_tw_buckets5000 net.ipv4.ip_local_port_range1024 655356.3 JVM优化
参数说明举例-Xms设置应用程序初始使用的堆内存大小年轻代老年代-Xms2g-Xmx设置应用程序能获得的最大堆内存早期JVM不建议超过32G内存管理效率下降-Xms4g-XX:NewSize设置初始新生代大小-XX:NewSize128m-XX:MaxNewSize设置最大新生代内存空间-XX:MaxNewSize256m-Xmnsize同时设置-XX:NewSize 和 -XX:MaxNewSize代-Xmn1g-XX:NewRatio以比例方式设置新生代和老年代-XX:NewRatio2new/old1/2-XX:SurvivorRatio以比例方式设置eden和survivor(S0或S1-XX:SurvivorRatio6eden/survivor6/1new/survivor8/1-Xss设置每个线程私有的栈空间大小,依据具体线程-Xss256k
在 catalina.sh 中设置 JAVA_OPTS 参数。
JAVA OPTS$JAVA_OPTS -server -Xms2048m -Xmx2046m -Xx:PermSize-1024m -XX:MaxPermSize1024m -Xmn768m-server 表示启用JDK的server模式实现在多核服务器性能更佳 -Xms2048m
-Xmx2048m 设置JVM堆内存初始值和最大值一样大一般设置为物理内存的 1/2-XX:Permsize1024m
-XX:MaxPermsize1024m
设置永久代《非堆内存) 初始值和最大最一样大一般设置为物理内存的 1/4初始值和最大最设置一样大的原因
可以减少GC次数和内存伸缩带来的频繁内存中请从而减少一定的系统开销。-Xmn 设置JVM堆内存新生代的大小一般设置为堆内存的 3/8-xx:ParallelGCThreads-2 设置并行GC(垃圾回收) 线程数提高垃圾回收效率
-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/usr/local/tomcat/temp/oom.hprof 设置进程发生OOM异常退出会进行DUMP备份
-XX:DisableExplicitGc 禁止调用System.gc()方法防止误调用系统gc方法导致系统的JVM堆内存大起大落而使系统响应效率严重降低