tomcat部署及优化(Tomcat部署和优化、压测 虚拟主机配置)


前言:

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,运行jsp和servlet,使用HTTP与客户端(通常是浏览器)进行通信。Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选,因为Tomcat 技术先进、性能稳定,成为目前比较流行的Web 应用服务器。Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,但它是独立运行的

mark

一:tomcat安装部署

1.1:Tomcat介绍

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会( Apache Software Foundation)Jakarta项目中的一个核心项目
  • 由 Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 是目前比较流行的Web应用服务器

1.2:Tomcat核心组件

mark

1.3:Tomcat处理请求大致流程

mark

HTTP服务器接收到请求之后把请求交给Servlet容器来处理,Servlet容器通过Servlet接⼝调⽤业务类。

Servlet接⼝和Servlet容器这⼀整套内容叫作Servlet规范。

Servlet容器有解耦的作用,避免Http服务器和业务类的直接耦合。

由于Tomcat根据Servlet规范实现了Servlet容器,同时它又具有Http服务器的功能,所以Tomcat拥有两个重要身份:

  • Servlet容器
  • Http服务器

1.4:Tomcat Servlet容器处理流程

mark

当用户请求某个URL资源时:

    1. Http服务器会把请求信息封装成Request对象,再转化成ServletRequest对象,传入Servlet容器
    1. Servlet容器接收到请求后,根据URLServlet的映射关系(必要的配置信息),找到对应的Servlet
    1. 如果Servlet还没有被加载,使用反射技术创建该Servlet,并调用Servletinit方法来完成初始化;
    1. 调用Servletservice方法处理请求,将请求处理结果封装成ServletResponse对象,返回给Http服务器
    1. Http服务器将接收到的ServletResponse对象转化成Response对象,返回给客户端。

1.5:Tomcat 系统总体架构

mark

Tomcat设计了两个核心组件连接器(Connector)容器(Container)来完成Tomcat的两大核心功能:

  • 连接器:负责对外交流,处理Socket连接,负责网络字节流Request/Response对象的转化;
  • 容器:负责内部处理,加载和管理Servlet,以及具体请求的处理。

二:Tomcat 连接器组件 Coyote

2.1:Coyote简介

Coyote是Tomcat连接器组件的名称,是对外的接口。客户端通过Coyote与服务端建立连接、发送请求并接受响应。

Coyote负责的是具体协议(应用层)IO(传输层)**的相关内容:

  • Coyote封装了底层的网络通信(Socket请求及响应处理)
  • Coyote使Catalina容器(容器组件)与具体的请求协议IO操作方式完全解耦
  • CoyoteSocket输入转化封装为Request对象,进一步交给Catalina容器处理,处理完成后,Catalina容器通过Coyote提供的Response对象将结果写入输出流

mark

三:Tomcat部署步骤

3.1:下载并安装JDK

  • JDK是Java语言的软件开发环境
  • JDK安装包保存在服务器的/root目录下
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# rz -E
rz waiting to receive.
[root@localhost ~]# ls
anaconda-ks.cfg              公共  文档
apache-tomcat-9.0.16.tar.gz  模板  下载
initial-setup-ks.cfg         视频  音乐
jdk-8u201-linux-x64.rpm      图片  桌面
[root@localhost ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@localhost ~]# rpm -ivh jdk-8u201-linux-x64.rpm
  • 设置环境变量
[root@localhost jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64
[root@localhost jdk1.8.0_201-amd64]# ls
bin             man
COPYRIGHT       README.html
include         release
javafx-src.zip  src.zip
jre             THIRDPARTYLICENSEREADME-JAVAFX.txt
lib             THIRDPARTYLICENSEREADME.txt
LICENSE
[root@localhost jdk1.8.0_201-amd64]# vim /etc/pro
profile    profile.d/ protocols  
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile

#末行添加
export JAVA_HOME=/usr/java/jbk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
#环境变量生效
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile
#查看java版本
[root@localhost jdk1.8.0_201-amd64]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
  • 安装启动Tomcat
[root@localhost ~]# ls
anaconda-ks.cfg              jdk-8u201-linux-x64.rpm  视频  下载
apache-tomcat-9.0.16.tar.gz  公共                     图片  音乐
initial-setup-ks.cfg         模板                     文档  桌面
#将安装包移动到Tomcat目录到/usr/local下
[root@localhost ~]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local


[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv apache-tomcat-9.0.16/ tomcat
[root@localhost bin]# pwd
/usr/local/tomcat/bin
[root@localhost bin]# ls
bootstrap.jar                 makebase.sh
catalina.bat                  setclasspath.bat
catalina.sh                   setclasspath.sh
catalina-tasks.xml            shutdown.bat
ciphers.bat                   shutdown.sh
ciphers.sh                    startup.bat
commons-daemon.jar            startup.sh
commons-daemon-native.tar.gz  tomcat-juli.jar
configtest.bat                tomcat-native.tar.gz
configtest.sh                 tool-wrapper.bat
daemon.sh                     tool-wrapper.sh
digest.bat                    version.bat
digest.sh                     version.sh
makebase.bat

shutdown.s:控制服务关闭
startup.sh:控制服务开启
  • 创建超链接
makebase.bat
[root@localhost bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/
[root@localhost bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/
  • 重启服务查看端口
[root@localhost bin]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      14181/java          
  • 客户机访问测试

浏览器访问http://20.0.0.42:8080 访问会出现Tomcat默认界面

mark

四:优化Toncat启动时间

  • 第一次启动查看日志你会发现Tomcat启动很慢,默认情况下需要几十秒,可以修改jdk参数进行优化。
  • /dev/random和/dev/urandom是Linux系统中提供的随机伪设备。这两个设备的任务是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH keys key等)需要他们提供随机和数据流.
  • 这两个设备的差异在于/dev/random的random pool依赖于系统中段,因此在系统的中断不足时/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断充分够用,/dev/random设备可以保证数据的随机性。/dev/urandom不依赖系统的中毒那,也就不会造成进程忙等待,但是数据的随机性也不高.

4.1:缩短Tomcat启动时间

[root@localhost bin]# cd /usr/java/jdk1./8.0_201-amd64/jre/lib/se
curity/
[root@localhost security]# ls
blacklist          java.policy    policy
blacklisted.certs  java.security  trusted.libraries
cacerts            javaws.policy
[root@localhost security]# vim java.security 

mark

#重启服务
root@localhost security]# startup.sh

4.2:Tomcat目录结构

[root@localhost ~]# ll /usr/local/tomcat/
总用量 124
drwxr-x---. 2 root root  4096 814 14:53 bin                              #启动和关闭Tomcat脚本文件
-rw-r-----. 1 root root 19203 25 2019 BUILDING.txt
drwx------. 3 root root   254 814 14:57 conf                             #Tomcat服务器各种配置文件
-rw-r-----. 1 root root  6095 25 2019 CONTRIBUTING.md
drwxr-x---. 2 root root  4096 814 14:53 lib                              #Tomcat服务器的jar包
-rw-r-----. 1 root root 57092 25 2019 LICENSE
drwxr-x---. 2 root root   197 814 14:57 logs                             #Tomcat的日志
-rw-r-----. 1 root root  2333 25 2019 NOTICE
-rw-r-----. 1 root root  3255 25 2019 README.md
-rw-r-----. 1 root root  6854 25 2019 RELEASE-NOTES
-rw-r-----. 1 root root 16262 25 2019 RUNNING.txt
drwxr-x---. 2 root root    30 814 14:53 temp                             #Tomcat运行时产生的文件
drwxr-x---. 7 root root    81 25 2019 webapps                           #项目资源的目录
drwxr-x---. 3 root root    22 814 14:57 work                             #工作目录:

五:构建虚拟主机

虚拟web主机的定义:

●在同一台服务器中运行多个Web站点,其中每一个站点并不独立占用一台真正的计算机

5.1:虚拟主机的优势

虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中的每一个站点实际上并不独自占用整个服务器,因此

被称为“虚拟Web主机”。 通过虚拟Web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。

5.2:举例:通过两个域名访问到不同的项目内容

5.2.1:步骤

  • 创建shuai和lisi项目目录和文件

  • 修改 Tomcat主配置文件

  • 重启 Toma服务

  • 测试:

5.21:创建shuai和lisi主页文件目录

drwxr-x---. 3 root root    22 814 14:57 work
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# mkdir shuai lisi
[root@localhost webapps]# ls
docs  examples  host-manager  lisi  manager  ROOT  shuai
[root@localhost webapps]# cd shuai/ 
[root@localhost shuai]# vim index.jsp
#编写首页信息
<h1>this is shuai web</h1>
[root@localhost shuai]# cd ../lisi/
[root@localhost lisi]# vim index.jsp
#编写lisi首页信息
<h1>this is lisi web</h1>

5.22:设置DNS和修改Tomcat主配置文件

[root@localhost lisi]# yum -y install bind
  • 配置DNS主配置文件
[root@localhost lisi]# vim /etc/named.conf 

options {
    
    
        listen-on port 53 {
    
     any; };
        listen-on-v6 port 53 {
    
     ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     {
    
     any; };
  • 配置区域配置文件
[root@localhost lisi]# vim /etc/named.rfc1912.zones 
zone "shuai.com" IN {
    
    
        type master;
        file "shuai.com.zone";
        allow-update {
    
     none; };
};

zone "lisi.com" IN {
    
            type master;
        file "lisi.com.zone";
        allow-update {
    
     none; };
};      
  • 配置区域数据
[root@localhost lisi]# cd /var/named/
[root@localhost named]# cp -p named.localhost shuai.com.zone
[root@localhost named]# vim shuai.com.zone 
[root@localhost named]# cp -p shuai.com.zone lisi.com.zone

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
www IN  A       20.0.0.42


#重启服务
[root@localhost named]# systemctl restart named
  • 客户机测试域名解析

mark

5.23:配置Tomcat主配置文件

[root@localhost bin]# cd /usr/local/tomcat/
[root@localhost tomcat]# cd conf/
[root@localhost conf]# ls
Catalina             jaspic-providers.xml  tomcat-users.xml
catalina.policy      jaspic-providers.xsd  tomcat-users.xsd
catalina.properties  logging.properties    web.xml
context.xml          server.xml
[root@localhost conf]# vim server.xml 
#G到末行 
      <Host name="www.shuai.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/shuai" path="" reloadable="true"/>
      </Host>
      <Host name="www.lisi.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/lisi" path="" reloadable="true"/>
      </Host>

mark

  • 重启服务
[root@localhost conf]# shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@localhost conf]# startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
  • 测试主机

mark

mark

六:Tomcat优化

6.1:Tomcat配置文件参数优化

  • 【maxThreads】:Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200。
  • 【minSpareThreads】:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。
  • 【maxSpareThreads】:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。默认值是-1(无限制)。一般不需要指定。
  • 【URIEncoding】:指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web 服务器软件配置方便,需要分别指定。
  • 【connnectionTimeout】:网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。
  • 【enableLookups】:是否反查域名,以返回远程主机的主机名,取值为:true 或 false, 如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。
  • 【disableUploadTimeout】:上传时是否使用超时机制。应设置为 true。
  • 【connectionUploadTimeout】:上传超时时间,毕竟文件上传可能需要消耗更多的时间, 这个根据你自己的业务需要自己调,以使 Servlet 有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
  • 【acceptCount】:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。
  • 【compression】:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。
  • 【compressionMinSize】:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。
  • 【compressableMimeType】:压缩类型,指定对哪些类型的文件进行数据压缩。
  • noCompressionUserAgents=“gozilla, traviata”:对于以下的浏览器,不启用压缩。
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml 
<Connector port="8080" protocol="HTTP/1.1"		'//找到此段落'
               connectionTimeout="20000"
               redirectPort="8443" />
'//在 redirectPort="8443" 和/>中间添加以下段落'
minSpareThreads="50"
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8"
compression="on" 
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"
[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh

6.2:压测演示

win 10安装jdk java的环境

设置环境变量

mark

mark

3.测试环境

mark

  • 把压测工具粘贴到虚拟机中,打开软件

mark

打开文件 选择桌面的压测工具

mark

启动优化后

[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml 
<Connector port="8080" protocol="HTTP/1.1"		'//找到此段落'
               connectionTimeout="20000"
               redirectPort="8443" />
'//在 redirectPort="8443" 和/>中间添加以下段落'
minSpareThreads="50"
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8"
compression="on" 
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"
#启动服务
[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh

mark

  • 再次压测
    mark

猜你喜欢

转载自blog.csdn.net/weixin_47151643/article/details/108181538