Tomcat部署与优化

文章目录

  • 一.Tomcat
        • 1.1Tomcat介绍
        • 1.2Tomcat服务部署
  • 二.Tomcat优化

一.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部署与优化_第1张图片
Tomcat 功能组件结构:
Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

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

Tomcat部署与优化_第2张图片
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 
#安装好的话,可以使用以下命令进行解压升级安装

Tomcat部署与优化_第3张图片
查看jave 的解压文件放在哪个目录里

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

Tomcat部署与优化_第4张图片
设置JDK环境变量
Tomcat部署与优化_第5张图片

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  #查看版本

                                                

Tomcat部署与优化_第6张图片

Tomcat部署与优化_第7张图片

  • 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”。
Tomcat部署与优化_第8张图片

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

Tomcat部署与优化_第9张图片
4.安装启动Tomcat

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

Tomcat部署与优化_第10张图片

安装启动Tomcat
后台启动:
Tomcat部署与优化_第11张图片
前台启动:

Tomcat部署与优化_第12张图片
测试结果:
Tomcat部署与优化_第13张图片

关闭服务
Tomcat部署与优化_第14张图片

开启后台启动
Tomcat部署与优化_第15张图片

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

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

Tomcat部署与优化_第16张图片

实现输入命令进行开启和关闭服务:
Tomcat部署与优化_第17张图片

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部署与优化_第18张图片

修改完配置文件后进行重现启动tomcat:
Tomcat部署与优化_第19张图片Tomcat部署与优化_第20张图片

主要目录说明:

ll /usr/local/tomcat/

Tomcat部署与优化_第21张图片

文件名 作用
bin 存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh、startup.sh、shutdown.sh
conf 存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml
lib 存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
logs 存放 Tomcat 执行时的日志
temp 存放 Tomcat 运行时产生的文件
webapps 存放 Tomcat 默认的 Web 应用项目资源的目录
work Tomcat 的工作目录,存放 Web 应用代码生成和编译文件

Tomcat部署与优化_第22张图片

Tomcat部署与优化_第23张图片
在这里插入图片描述

登入虚拟机修改并测试;
Tomcat部署与优化_第24张图片
Tomcat部署与优化_第25张图片
Tomcat部署与优化_第26张图片
Tomcat部署与优化_第27张图片
在这里插入图片描述
Tomcat部署与优化_第28张图片
Tomcat部署与优化_第29张图片
Tomcat部署与优化_第30张图片在这里插入图片描述

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

Tomcat部署与优化_第31张图片
Tomcat部署与优化_第32张图片

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

Tomcat部署与优化_第33张图片

Tomcat部署与优化_第34张图片

在这里插入图片描述
Tomcat部署与优化_第35张图片
Tomcat部署与优化_第36张图片

测试实验结果:
Tomcat部署与优化_第37张图片

二.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设置一样大,这样可以减轻伸缩堆大小带来的压力。

你可能感兴趣的:(tomcat,java,servlet)