Tomcat快速入门

2022-03-04 分类:tomcat 阅读(659) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.Tomcat基本介绍

1.JVM基本介绍

Java业务都是运行在Java虚拟机上的,Java虚拟机简称为JVM
所谓虚拟机是指:通过软件模拟具有完整的硬件系统的功能、运行在一个完全隔离环境中的计算机系统。

2.为什么JAVA需要JVM虚拟机?

像早起的C语言不支持跨平台,因为C语言想在Windows、Linux、mac上运行,需要进行分别编译。那么在Linux上有非常多的优秀软件,如果需要在Windows上使用则需要重新编译。移植性很差。
而JAVA则不同,JAVA是可以跨平台、只需要将源代码进行一次编译,能够在多处运行。
那JAVA是怎么做到的?
它只需要在Windows和Linux平台运行一个jvm,这样我们能将JAVA编译好的war包在Windows和Linux平台运行起来,无需我们重复编译。而jvm是jre提供。

3.JAVA环境jre和jdk的区别在哪?

Jre是JAVA的运行环境,会包含jvm
Jdk是JAVA的开发环境,会包含JAVA的运行环境jre
如果说单纯的运行JAVA代码,只需要jre足够,但如果需要提供开发环境以及运行环境则需要jdk

4.什么是tomcat?

Tomcat和nginx类似,也是一个web服务器软件。
只不过tomcat是基于JAVA开发的web服务器,主要解析JAVA代码

5.tomcat与nginx有什么区别?

Nginx仅支持静态资源解析,而tomcat支持解析JAVA开发的web应用,还支持解析静态资源(效率不高)。
Nginx适合做前端负载均衡,而tomcat适合做后端应用服务处理。
通常情况下,是nginx和tomcat结合,由nginx处理静态资源,tomcat处理动态资源。

2.Tomcat环境准备与部署

######二进制将tomcat大礼包上传至Linux
###部署jdk
[root@web01 ~]# mkdir /app
[root@web01 ~]# tar -xf jdk-8u60-linux-x64.tar.gz -C /app/
[root@web01 ~]# ln -s /app/jdk1.8.0_60/ /app/jdk
####java jdk 环境变量
[root@web01 ~]# cat >>/etc/profile<<'EOF'
> export JAVA_HOME=/app/jdk
> export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
> export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
> export TOMCAT_HOME=/app/tomcat
> EOF
[root@web01 ~]# . /etc/profile
#检查 jdk是否部署完成
[root@web01 ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
#部署 tomcat
[root@web01 ~]# tar -xf apache-tomcat-8.5.66.tar.gz -C /app/
[root@web01 ~]# ln -s /app/apache-tomcat-8.5.66/ /app/tomcat
##检查 jdk+tomcat
[root@web01 ~]# /app/tomcat/bin/version.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:   
Server version: Apache Tomcat/8.5.66
Server built:   May 8 2021 22:44:01 UTC
Server number:  8.5.66.0
OS Name:        Linux
OS Version:     3.10.0-1127.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_60-b27
JVM Vendor:     Oracle Corporation

3.Tomcat服务管理

1.tomcat相关命令

#tomcat 管理命令
bin目录###/app/tomcat/bin/
主要命令

	startup.sh 启动tomcat

	shutdown.sh 关闭tomcat

	version.sh 部署完成后 检查 jdk 与 tomcat
	catalina.sh 卡特琳娜#tomcat核心 脚本 startup shutdown 都会调用这 个脚本 #配置 java启动参数 ,tomcat远程管 理 配置jvm参数

#启动tomcat

[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.

#检查服务是否启动

[root@web01 ~]# ss -lntup|grep java
[root@web01 ~]# ps -ef |grep java

2.Tomcat目录结构

目录含义
binstartup.sh
 shutdown.sh
 catalina.sh
conf/tomcat配置文件
 server.xml #nginx.conf 主配置文件
 web.xml #补充 额外功能
 tomcat-user.xml #tomcat管理端配置文件 用户名 和 密 码
logs日志
 catalina.out #tomcat最全日志 查看 error startup 启动 的时间 catalina.out切割之后内容不变,未来需要logroate 切割
 catalina.2019-12-16.log #catalina.out的切割日志 ,
 localhost_access_log.2019-12-16.txt #tomcat acccess.log 访问日志
webappstomcat站点目录 nginx html war包

3.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.

4.tomcat日志与进程信息

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

2.Tomcat日志

catalina.out持续增加#error 错误#startup 或 finished 启动所需的时间
catalina-年-月-日.log日志切割
xxxxxaccess.log访问日志

5.Tomcat配置文件

server.xml
1.端口部分

###8005 shutdown端口
tomcat shutdown端口 telnet/nc 连接到这个端口 输入暗号 tomcat将会关闭

###8080 http协议端口

###8009 ajp协议端口 与apache连接使用
#8009端口 是用来给 apache与tomcat进行连接使用
#现在 tomcat+nginx 可以把 这一行8009注释 提高tomcat性能

2.tomcat管理端 相应的配置
#管理端 实际生产环境 关闭

3.配置 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 时间 日期和时间
#&quot 双引号#
#%r 请求起始行 $request
#%s  $status 状态码
#%b  大小

整体配置文件

[root@web01 conf]# cat server.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!-- 关闭tomcat的端口  -->
<Server port="8005" shutdown="SHUTDOWN">
<!-- 监听器  -->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- 全局资源限制-conf/tomcat-user.xml指定的   -->
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
<!-- 连接器用户匹配用户请求 -->
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<!-- 引擎 -->
    <Engine name="Catalina" defaultHost="localhost">
<!--调用资源限制-->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
<!--虚拟主机-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

6.tomcat 部署应用及方式

1. 部署应用方式

如果开发给你的是war包 则把war包放入到 tomcat webapps 自动 解压 自动部署
如果开发给你的是jar包 相当于jar包里面已经集成了tomcat java - jar xxxx.jar

2.java开源软件
zrlog java blog

3.部署应用-zrlog

#tomcat配置文件如下:
[root@web01 tomcat]# cat conf/server.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!-- 关闭tomcat的端口  -->
<Server port="8005" shutdown="SHUTDOWN">
<!-- 监听器  -->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- 全局资源限制-conf/tomcat-user.xml指定的   -->
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
<!-- 连接器用户匹配用户请求 -->
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<!-- 引擎 -->
    <Engine name="Catalina" defaultHost="localhost">
<!--调用资源限制-->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
<!--虚拟主机-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

      <Host name="zrlog.com"  appBase="webapps/zrlog"
            unpackWARs="true" autoDeploy="true">


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>



    </Engine>
  </Service>
</Server>
解压zrlog代码文件
cd /app/tomcat/webapps/zrlog/ROOT/
[root@web01 ROOT]# unzip /root/tomcat大礼包-2022/zrlog-2.1.11-99a5759-release.zip
重启tomcat
[root@web01 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 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.
访问web页面

7.tomcat 3种工作模式: bio , nio , apr

1.io模型区别

bioblocking iotomcat 7及之 前, 同步模型 阻 塞一个线程处理一个请求,缺 点:并发量高时,线程数较 多,浪费资源。
nionew iotomcat 8及以后 的工作模式 异步 非阻塞nio1(默认的) nio2 可以通过少 量的线程处理大量的请求
aprApache Portable Runtime应对高并发场景Tomcat对静态文件的处理性 能。 Tomcat apr也是在Tomcat 上运行高并发应用的首选模式

2.查看当前使用的io模型

3.修改io模型

修改配置文件
[root@web01 /app/tomcat/webapps]# grep -ni nio2 ../conf/server.xml
69:    <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
查看修改结果-catalina.out日志
apr
#安装apr环境
yum -y install apr apr-devel tomcat-native
#修改8080&8009端口对应的server.xml
protocol="org.apache.coyote.http11.Http11Nio2Protocol" 把Nio2 修改为Apr

8.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

9.tomcat的 systemctl管理配置

#编辑/usr/lib/systemd/system/tomcat.service
[root@web01 /app/tomcat/webapps/zrlog]# 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=/app/tomcat/bin/startup.sh
ExecStop=/app/tomcat/bin/shutdown.sh

[Install]
WanteBy=multi-user.target
#将启动停止tomcat的脚本添加一个source命令
[root@web01 ~]# sed  -i  '2a source /etc/profile' /app/tomcat/bin/shutdown.sh /app/tomcat/bin/startup.sh
#重载配置文件
[root@web01 ~]# systemctl daemon-reload

10.故障案例1 tomcat(java) 服务器 运行占用大量swap 物理内存占用较少

java代码问题
增加swap
Linux内核参数:
/etc/sysctl.conf
vm.swappiness=0
sysctl -p
内核参数生效
vm.swappiness=0
控制系统是否优先使用物理内存 数越小 越优先使用物理内存

11.Tomcat的https

参考在CentOS系统Tomcat 8.5或9上部署SSL证书 (aliyun.com)

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1