Tomcat部署与优化

文章详细介绍了Tomcat的结构和工作原理,包括Web容器、Servlet容器和JSP容器的角色,以及请求处理流程。在服务部署部分,讲述了如何在Linux环境中安装JDK和Tomcat,设置环境变量,并通过systemd进行服务管理。在优化部分,强调了JVM参数调优对Tomcat性能的影响,如内存分配策略和垃圾回收算法的选择。
摘要由CSDN通过智能技术生成

一.Tomcat

1.1Tomcat介绍

Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开发而成。

  • 可以作为Web应用服务器,处理静态的Web页面,如html页面,但是性能一般
  • 还可以作为`servlet/jsp``容器,处理JAVA语言开发的Jsp动态页面程序,这也是tomcat的主要应用程序

Tomcat由一系列的组件构成,其中核心组件有三个:
(1)Web容器:完成Web服务器的功能;
(2)Serviet容器:名字为catalina,用于处理Serviet代码;
(3)JSP容器:用于讲JSP动态网页翻译成Serviet代码;
在这里插入图片描述
Tomcat 功能组件结构:
Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

  • Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
  • Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。
  • Service:对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。

在这里插入图片描述
Container 结构分析:
每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器:
4个子容器的作用分别是:

(1)Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;
(2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
(3)Context:代表一个 Web 应用,包含多个 Servlet 封装器;
(4)Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。

Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。

Tomcat 请求过程:

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

1.2Tomcat服务部署

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。

1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.安装JDK
cd /opt
拉入软件包
java -version

3.使用rpm -ivh 来进行解压包

rpm -ivh jdk-8u201-linux-x64.rpm 
#安装好的话,可以使用以下命令进行解压升级安装

在这里插入图片描述
查看jave 的解压文件放在哪个目录里

rpm -qpl jdk-8u201-linux-x64.rpm
#可以查看到Java 的配置文件在哪个目录里

在这里插入图片描述
设置JDK环境变量
在这里插入图片描述

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


source /etc/profile.d/java.sh   #重新加载一下配置
echo $PATH  #查看环境变量有没有设置成功
java -version  #查看版本

                                                

在这里插入图片描述

在这里插入图片描述

  • 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.jar:dt.jar是关于运行环境的类库,主要是swing包。

首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。
在这里插入图片描述

public class Hello {
   public static void mian(String[] args) {
      System.out.println("Hello World");
   }
}
 

在这里插入图片描述
4.安装启动Tomcat

cd /opt/
tar xf apache-tomcat-8.5.16.tar.gz 
mv apache-tomcat-8.5.16 /usr/local/tomcat

在这里插入图片描述

安装启动Tomcat
后台启动:
在这里插入图片描述
前台启动:

在这里插入图片描述
测试结果:
在这里插入图片描述

关闭服务
在这里插入图片描述

开启后台启动
在这里插入图片描述

到该目录里创建配置文件,实现开启和关闭

vim /usr/lib/systemd/system/tomcat.service

[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

在这里插入图片描述

实现输入命令进行开启和关闭服务:
在这里插入图片描述

5.优化tomcat启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security

--117行--修改
securerandom.source=file:/dev/urandom

在这里插入图片描述

修改完配置文件后进行重现启动tomcat:
在这里插入图片描述在这里插入图片描述

主要目录说明:

ll /usr/local/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 应用项目资源的目录
workTomcat 的工作目录,存放 Web 应用代码生成和编译文件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

登入虚拟机修改并测试;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置文件1
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

配置文件2
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试实验结果:
在这里插入图片描述

二.Tomcat优化

Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优。

参数说明:

参数说明
-server一定要作为第一个参数,在多个CPU时性能佳
-Xms堆内存的初始大小,是分配JVM的初始内存,默认为物理内存的1/64。一般来讲,此值设的大点,程序会启动的快一点。
-Xmx堆内存的最大大小,是分配JVM的最大内存,默认为物理内存的1/4。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。
-Xmn堆内新生代的大小,通过这个值也可以得到老生代的大小:-Xmx减去-Xmn。官方推荐配置为整个堆的 3/8。
-Xss设置每个线程可使用的内存大小,即栈的大小。一般情况下,设置256k就足够了,此配置将会影响此进程中并发线程数的大小。
-XX:ParallelGCThreads配置并行收集器的线程数,即:同时有多少个线程一起进行垃圾回收。当 CPU 数量小于8,此值建议配置等于 CPU 数量。
-XX:PermSize设置非堆内存初始值,即持久代内存大小,默认是物理内存的1/4
-XX:MaxPermSize最大非堆内存的大小,即最大持久代内存大小,默认是物理内存的1/4
-XX:+HeapDumpOnOutOfMemoryError表示当JVM发生OOM时,自动生成DUMP文件
-XX:HeapDumpPath表示生成DUMP文件的路径
-XX:+UseParNewGC对新生代采用多线程并行回收,缩短垃圾收集的时间
-XX:+UseConcMarkSweepGC并发标记清除收集器,它是老年代的收集算法,缩短垃圾收集的时间
-XX:+DisableExplicitGC禁止调用System.gc(),防止误调用gc方法导致系统的 JVM 大起大落而使系统响应时间严重降低。
-Djava.awt.headless=true免避在 Linux/Unix 环境下 Web 网页不能正常显示图片
-XX:+CMSParallelRemarkEnabled启用并行标记,降低标记停顿
-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0这两个参数默认值就是这样的,表示触发FullGC时压缩堆,优化内存碎片
-XX:CMSInitiatingOccupancyFraction=70在应用程序使用70%完内存后开始CMS垃圾收集

知识点:

  • 默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
  • 因此建议-Xms与-Xmx设成一样的值,均设为物理内存的一半。其目的是为了避免在java每次GC(垃圾回收机制清理堆区)后需要重新调整堆的大小而浪费资源。
  • 堆区进一步细化分为:新生代、中生代、老生代。
  • java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。
  • 整个JVM堆大小 = 新生代大小 + 老生代大小 + 永久代大小
  • 非堆区内存是不会被java垃圾回收机制进行处理的,且最大堆内存与最大非堆内存的和不能超出操作系统的可用内存。
  • XMX和XMS设置一样大,MaxPermSize和MinPermSize设置一样大,这样可以减轻伸缩堆大小带来的压力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanghwei 17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值