Tomcat
版权声明:原创作品,谢绝转载!否则将追究法律责任。 ————— 作者:kirin
一、Tomcat基本介绍
1.1.JVM基本介绍
Java业务都是运行在java虚拟机上的,java虚拟机简称为JVM(java Virtual Machine)
所谓虚拟机是指:通过软件模拟具有完整硬件系统的功能、运行在一个完全隔离环境中的计算机系统。
1.2.为什么Java需要VM虚拟机?
像早前的C语言不支持跨平台,因为C语言要想在Windows、Linux、Mac上运行,需要进行分别编译。那么在Linux上有非常多的优秀软件,如果需要在Windows上使用则需要重新进行编译。移植性很差。
而java则不同,java是可以跨平台,只需要将源代码进行一次编译,能够在多处运行。
# 那么java怎么做到?
它只需要在Windows、Linux系统上运行一个JVM,这样我们能将java编译好的war包在Windows和Linux平台运行起来,无需我们重复编译。而JVM是由jre提供。(java运行环境 java runtime Enviroment)
1.3.java环境re和JDK环境的区别在哪?
jre是java的运行环境,会包含jvm
jdk是java的开发环境,会包含java的运行环境re。
如果说单纯的运行java代码,只需要jre足够,但如果需要提供开发环境以及运行环境则需要jdk。
1.4.什么是Tomcat?
Tomcat和此前学习过的Nginx类似,也是一个web服务器软件。
只不过tomcat是基于java开发的web服务,主要解析java代码。
1.5.Tomcat与nginx有什么区别?
Nginx仅支持静态资源解析,而Tomcat支持解析java开发的web应用,还支持解析静态资源(效率不高)。
Nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。
通常情况下,企业会使用Nginx+tomcat结合,由Nginx处理静态资源,tomcat处理动态资源。
二、环境准备与部署
Web03 | |||
---|---|---|---|
Web03 | Jdk tomcat | 10.0.0.9 | 172.16.1.9 |
2.1.yum方式安装
web03】# yum install -y java
web03】# mkdir -p /soft && cd /soft
web03】# wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.46/bin/apache-tomcat-9.0.46.tar.gz
web03】# tar xf apache-tomcat-9.0.46.tar.gz
web03】# ln -s /soft/apache-tomcat-9.0.46 /soft/tomcat
web03】# /soft/tomcat/bin/startup.sh ##启动服务
web03】# ss -lntup|grep java ##默认8080端口
浏览器输入10.0.0.9:8080
##编辑配置文件、目的是使用systemctl来启动、关闭等功能
web03】# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/soft/tomcat/bin/startup.sh
ExecStop=/soft/tomcat/bin/shutdown.sh
[Install]
WanteBy=multi-user.target
web03】# systemctl start tomcat.service
web03】# systemctl enable tomcat.service
web03】# systemctl status tomcat.service
2.2.Tomcat的配置文件
bin | tomcat启动与停止脚本,启动前需要 |
---|---|
conf | Tomcat配置文件 server.xml |
Lib | Tomcat依赖jar文件,连接数据库,就需要jar支持 |
Logs | Tomcat的日志文件,catalina.out |
Temp | Tomcat临时目录 |
Webapps | Tomcat的默认站点路径 webapps/ROOT |
Work | Tomcat缓存目录 |
2.3.tomcat主配置文件——>图解
一个server可以启动一个tomcat实例(当然也可以启动多个tomcat实例)
一个tomcat实例中包含多个tomcat连接器,connector的主要功能是接收、响应用户的http请求。
service的作用是:将connector关联至rngine(catalina引擎)
host就是一个站点,类似于nginx的server_name
context类似于nginx中的location概念
2.4.Tomcat的http请求过程
用户发出一个请求,如:http://tomcat.kirin.com:8080/index.jsp
Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给副歌条件的Engine
Engine通过请求中的主机名tomcat.kirin.com匹配满足条件的虚拟主机(Host)
域名匹配成功后,则上虚拟机指定的AppBase(代码存放目录)最后将解析产生的结果返回给用户。
三、Tomcat管理端
Tomcat管理端应用场景 | |
---|---|
搭建与测试的时候 开启管理端 进 行调试 | 开启管理端 debug |
生产环境中 | 关闭管理端 ,清除管理端相关 文档 |
注意:tomcat 8.5 对管理端限制更严格
要配置tomcat-user.xml之外
还限制只能在本地使用127.0.0.1访问管理的
从tomcat8.5开始管理端默认只能通过本地使用 127.0.0.1访问(类似于nginx allow127.0.0.1 ; deny all;)
默认情况下,只能从与Tomcat运行在同一台计算机上的浏览器访问管理器。如果要修改此限制,则需要编辑管理器的context.xml文件
[root@web01 /app/tomcat]# find -type f -name "context.xml" |xargs grep allow
./webapps/host-manager/META-INF/context.xml: allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
./webapps/manager/META-INF/context.xml: allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@web01 /app/tomcat]# grep allow ./webapps/host-manager/WEB-INF/manager.xml
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
#重启服务
[root@web01 /app/tomcat]# bin/shutdown.sh
Using CATALINA_BASE: /app/tomcat
Using CATALINA_HOME: /app/tomcat
Using CATALINA_TMPDIR: /app/tomcat/temp
Using JRE_HOME: /app/jdk
Using CLASSPATH: /app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
[root@web01 /app/tomcat]# bin/startup.sh
Using CATALINA_BASE: /app/tomcat
Using CATALINA_HOME: /app/tomcat
Using CATALINA_TMPDIR: /app/tomcat/temp
Using JRE_HOME: /app/jdk
Using CLASSPATH: /app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
四.tomcat日志与进程信息
4.1 进程信息
\#ps命令查询 java进程信息
[root@web01 /app/tomcat]# ps -ef |grep java
\# jps java ps
[root@web01 /app/tomcat]# jps -lvm |grep -v jps
\# java 高级命令 Troubleshooting Tools
\##jmap 取出 java进程信息 jvm内存信息 heap memory details for a process, core file
\##导出 信息
[root@web01 /app/tomcat]# jmap -heap 2016
4.2 Tomcat日志
catalina.out | 持续增加#error 错误#startup 或 finished 启动所需的时间 |
---|---|
catalina-年-月-日.log | 日志切割 |
xxxxxaccess.log | 访问日志 |
五、Tomcat配置文件
\#server.xml
\#端口部分 ###8005 shutdown端口
\###tomcat shutdown端口 telnet/nc 连接到这个端口 输入暗号 tomcat将会关闭
8080 http协议端口
8009 ajp协议端口 与apache连接使用
8009端口 是用来给 apache与tomcat进行连接使用
现在 tomcat+nginx 可以把 这一行8009注释 提高tomcat性能
tomcat管理端 相应的配置
管理端 实际生产环境 关闭
配置 tomcat 虚拟主机的内容
Nginx tomcat
Server_name Host name 域名
root appBase 站点目录
unpackWARs #自动解压war包 #autoDeploy 自动部署 把代码加载到jvm内存中
#%h 客户端ip地址或者是域名
#%l (小写L) 远程用户
#%u 用户客户端 Remote user that was authenticated (if any), else '-' (escaped if required)
#%t 时间 日期和时间
#" 双引号#
#%r 请求起始行 $request
#%s $status 状态码
#%b 大小
六、tomcat部署应用及方式
1) 部署应用方式
如果开发给你的是war包 则把war包放入到 tomcat webapps 自动 解压 自动部署
如果开发给你的是jar包 相当于jar包里面已经集成了tomcat java - jar xxxx.jar
2) java开源软件
zrlog java blog
3) 部署应用-zrlog
七、tomcat 3种工作模式: bio , nio , apr
1) io模型区别
bio | blocking io | tomcat 7及之 前, 同步模型 阻 塞 | 一个线程处理一个请求,缺 点:并发量高时,线程数较 多,浪费资源。 |
---|---|---|---|
nio | new io | tomcat 8及以后 的工作模式 异步 非阻塞 | nio1(默认的) nio2 可以通过少 量的线程处理大量的请求 |
apr | Apache Portable Runtime | 应对高并发场景 | Tomcat对静态文件的处理性 能。 Tomcat apr也是在Tomcat 上运行高并发应用的首选模式 |
2) 查看当前使用的io模型
3) 修改io模型
修改配置文件
查看修改结果-catalina.out日志
apr
#安装apr环境
yum -y install apr apr-devel tomcat-native
#修改8080&8009端口对应的server.xml
protocol="org.apache.coyote.http11.Http11Nio2Protocol" 把Nio2 修改为Apr
八、tomcat多实例
多实例:在同一台服务器上面运行多个tomcat
应用场景: 让服务器资源充分利用 使用多实例
注意事项: 端口不同与路径不同.
/app/tomcat 8005
/app/tomcat_8081 8006
/app/tomcat_8082 8007
\#配置tomcat多实例 tomcat_8081 tomcat_8082
[root@web01 /app/tomcat/webapps]# cp -r /app/tomcat/ /app/tomcat_8081
[root@web01 /app/tomcat/webapps]# cp -r /app/tomcat/ /app/tomcat_8082
[root@web01 /app/tomcat/webapps]# sed -i 's#8080#8081#g' /app/tomcat_8081/conf/server.xml
[root@web01 /app/tomcat/webapps]# sed -i 's#8005#8006#g' /app/tomcat_8081/conf/server.xml
[root@web01 /app/tomcat/webapps]# sed -i 's#8080#8082#g' /app/tomcat_8082/conf/server.xml
[root@web01 /app/tomcat/webapps]# sed -i 's#8005#8007#g' /app/tomcat_8082/conf/server.xml
挨个启动
然后curl或浏览器访问tomcat多实例
##注意事项
index.jsp 直接访问首页文件或展示首页文件 #这个首页文件存放在webapps/ROOT下面
:8080/code/index.jsp
本文来自博客园,作者:kirin(麒麟),转载请注明原文链接:https://www.cnblogs.com/kirin365/articles/16321299.html