詳述Linux系統中Tomcat部署及優化

Tomcat介紹

  • 免費的、開放源代碼的Web應用服務器
  • Apache軟件基金會(Apache Software Foundation)Jakarta項目中的一個核心項目
  • 由Apache、Sun和一些公司及個人共同開發而成
  • 深受Java愛好者的喜愛,並得到部分軟件開發商的認可
  • 目前比較流行的Web應用服務器

Tomcat核心組件

  • Web容器
    • 完成 Web 服務器的功能
  • Serlet容器
    • 名字爲 catalina,用於處理 Servlet 代碼
  • JSP容器
    • 用於將 JSP 動態網頁翻譯成 Servlet 代碼

安裝Tomcat

下載並安裝JDK

  • 在部署 Tomcat 之前必須安裝好 jdk,因爲 jdk 是 Tomcat 運行的必要環境。而 jdk 的安裝也相對比較簡單,版本有很多,這裏我們選擇 rpm 版本即可!打開 oracle 官網,該網頁中會有 172 的大版本。根據所使用的計算機硬件配置,選擇其中一個安裝包
  • 本案例,選擇基於 linux64 位 rpm 版本,必須選中 Accept License Agreement再進行下載Linux x64 168.05 MB jdk-8u201-linux-x64.rpm
  • tomcat部署、壓測工具包下載
[root@localhost ~]# mount.cifs //192.168.100.10/tomcat /mnt      //將存有tomcat的工具掛載到mnt目錄
Password for root@//192.168.100.10/tomcat:  
[root@localhost ~]# cd /mnt     //進入mnt目錄
[root@localhost mnt]# ls         //查看是否成功掛載
12D18CFCD6599AFF0445766ACC4CA231C5025773.torrent  apache-tomcat-9.0.16.tar.gz
apache-jmeter-5.1                                 jdk-8u201-linux-x64.rpm
apache-jmeter-5.1.zip                             tomcat優化壓測.jmx
[root@localhost mnt]# rpm -ivh jdk-8u201-linux-x64.rpm       //安裝jdk包
警告:jdk-8u201-linux-x64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID ec551f03: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:jdk1.8-2000:1.8.0_201-fcs        ################################# [100%]
Unpacking JAR files...
    tools.jar...
    plugin.jar...
    javaws.jar...
    deploy.jar...
    rt.jar...
    jsse.jar...
    charsets.jar...
    localedata.jar...
[root@localhost mnt]# cd /usr/java/          //進入Java安裝目錄
[root@localhost java]# ls
default  jdk1.8.0_201-amd64  latest
[root@localhost java]# cd jdk1.8.0_201-amd64/   //進入jdk目錄
[root@localhost jdk1.8.0_201-amd64]# ls
bin             jre      README.html                         THIRDPARTYLICENSEREADME.txt
COPYRIGHT       lib      release
include         LICENSE  src.zip
javafx-src.zip  man      THIRDPARTYLICENSEREADME-JAVAFX.txt
[root@localhost jdk1.8.0_201-amd64]# pwd      //查看當前位置
/usr/java/jdk1.8.0_201-amd64             //複製此條目
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile    //編輯profile文件進行參數更新
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64        //聲明變量位置
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar    //聲明CLASS變量
export PATH=$JAVA_HOME/bin:$PATH        //聲明環境變量
:qw
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile    //執行profile文件
[root@localhost jdk1.8.0_201-amd64]# java -version          //查看Java版本,測試Java是否安裝成功
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

安裝tomcat

root@localhost jdk1.8.0_201-amd64]# cd /mnt     
[root@localhost mnt]# ls
12D18CFCD6599AFF0445766ACC4CA231C5025773.torrent  apache-tomcat-9.0.16.tar.gz
apache-jmeter-5.1                                 jdk-8u201-linux-x64.rpm
apache-jmeter-5.1.zip                             tomcat優化壓測.jmx
[root@localhost mnt]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local/     //解壓tomcat文件到/usr/local目錄
[root@localhost mnt]# cd /usr/local/
[root@localhost local]# ls
apache-tomcat-9.0.16  bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@localhost local]# mv apache-tomcat-9.0.16/ tomcat    //將文件更名
[root@localhost local]# cd tomcat/    //進入tomcat目錄
[root@localhost tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@localhost tomcat]# cd bin    //進入命令存放目錄
[root@localhost bin]# ls
bootstrap.jar       commons-daemon-native.tar.gz  makebase.sh       tomcat-juli.jar
catalina.bat        configtest.bat                setclasspath.bat  tomcat-native.tar.gz
catalina.sh         configtest.sh                 setclasspath.sh   tool-wrapper.bat
catalina-tasks.xml  daemon.sh                     shutdown.bat      tool-wrapper.sh
ciphers.bat         digest.bat                    shutdown.sh       version.bat
ciphers.sh          digest.sh                     startup.bat       version.sh
commons-daemon.jar  makebase.bat                  startup.sh
[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]# systemctl stop firewalld.service   //關閉防火牆
[root@localhost bin]# setenforce 0           //關閉增強性安全功能
[root@localhost bin]# startup.sh          //使用命令啓動tomcat服務(可以使用TAB鍵補全哦)
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      3137/java 
[root@localhost bin]# 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.j
[root@localhost security]# cd /usr/java/jdk1.8.0_201-amd64/jre/lib/security/   //進入Java目錄
[root@localhost security]# vim java.security      //修改jdk參數,優化tomcat啓動速度
...//省略部分內容...
# In addition, if "file:/dev/random" or "file:/dev/urandom" is
# specified, the "NativePRNG" implementation will be more preferred than
# SHA1PRNG in the Sun provider.
#
securerandom.source=file:/dev/urandom      //random更改爲urandom優化tomcat啓動速度
...//省略部分內容...
:wq
[root@localhost security]# 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 security]# yum install -y bind     //安裝DNSfuwu
Loaded plugins: fastestmirror, langpacks
base                                                                     | 3.6 kB  00:00:00     
extras                                                                   | 2.9 kB  00:00:00
...//省略部分內容...
Installed:
  bind.x86_64 32:9.11.4-9.P2.el7     
...//省略部分內容...
Complete!
[root@localhost conf]# vim /etc/named.conf      //編輯修改DNS服務主配置文件
...//省略部分內容...
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; };
...//省略部分內容...
:wq
[root@localhost conf]# vim /etc/named.rfc1912.zones  //編輯修改DNS服務區域配置文件
...//省略部分內容...
zone "kgc.com" IN {
        type master;
        file "kgc.com.zone";
        allow-update { none; };
};
...//省略部分內容...
:wq 
[root@localhost conf]# cd /var/named/                 //進入DNS服務區域數據文件存放目錄
[root@localhost named]# cp -p named.localhost kgc.com.zone    //複製區域數據文件模板
[root@localhost named]# vim kgc.com.zone      //編輯修改DNS服務區域數據配置文件
$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       192.168.144.133
:wq   
[root@localhost named]# systemctl start named      //啓動DNS服務
  • 在客戶機中輸入域名測試tomcat服務

詳述Linux系統中Tomcat部署及優化

詳述Linux系統中Tomcat部署及優化

Tomcat虛擬主機配置

[root@localhost conf]# vim /etc/named.rfc1912.zones        //編輯DNS服務區域配置文件
...//省略部分內容...
zone "kgc.com" IN {
        type master;
        file "kgc.com.zone";
        allow-update { none; };
};

zone "accp.com" IN {
        type master;
        file "accp.com.zone";
        allow-update { none; };
};
...//省略部分內容...
:wq
[root@localhost conf]# cd /var/named/             //進入區域數據文件目錄
[root@localhost named]# cp -p kgc.com.zone accp.com.zone      //複製DNS服務區域數據配置文件
[root@localhost named]# systemctl restart named     //重啓DNS服務
[root@localhost named]# cd ~
[root@localhost ~]# cd /usr/local/tomcat/      //進入tomcat目錄文件
[root@localhost tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@localhost tomcat]# cd webapps/        //進入服務網頁站點
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT
[root@localhost webapps]# mkdir kgc         //創建目錄
[root@localhost webapps]# echo "this is kgc web" > kgc/index.jsp   //編輯主頁文件
[root@localhost webapps]# mkdir accp        //創建目錄
[root@localhost webapps]# echo "this is accp web" > accp/index.jsp   //編輯主頁文件
[root@localhost webapps]# tree accp/ kgc/    //使用命令以樹形結構查看目錄
accp/
└── index.jsp
kgc/
└── index.jsp
[root@localhost webapps]# cd ../conf/     //進入tomcat配置文件存放目錄
[root@localhost conf]# ls
Catalina         catalina.properties  jaspic-providers.xml  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          jaspic-providers.xsd  server.xml          tomcat-users.xsd
[root@localhost conf]# vim server.xml     //編輯配置文件,編輯虛擬主機配置
...//省略部分內容...
     <Host name="www.accp.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
          <Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true"/>   
     </Host>

     <Host name="www.kgc.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
         <Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true"/> 
     </Host>
...//省略部分內容...
:wq
[root@localhost conf]# shutdown.sh        //關閉tomcat服務
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        //啓動tomcat服務
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.
  • 在客戶機中測試虛擬主機

詳述Linux系統中Tomcat部署及優化詳述Linux系統中Tomcat部署及優化

Tomcat網頁優化

  • Tomcat 的缺省配置並不適合生產環境,它會頻繁出現假死現象需要重啓,只有通過不斷壓測優化才能讓它最高效率穩定的運行。優化主要有三方面,分爲操作系統優化(內核參數優化),Tomcat 配置文件參數優化,Java 虛擬機(JVM)調優。其中最難理解的就是 jvm調優。系統優化本章不介紹,本章將配合 jmeter 壓測工具進行調優前和調優後的數據進行比較。

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"】對於以下的瀏覽器,不啓用壓縮

  • 注意
    • 如果已經對代碼進行了動靜分離,靜態頁面和圖片等數據就不需要 Tomcat 處理了,那麼也就不需要在 Tomcat 中配置壓縮了。因爲這裏只有一臺 Tomcat 服務器,而且壓測的是Tomcat 首頁,會有圖片和靜態資源文件,所以這裏啓用壓縮

配置實例

  • 優化前先在客戶機中測試網頁壓測結果
  • 開啓一臺win 10虛擬機,現在虛擬機中安裝配置Java環境,壓測工具是基於Java環境運行的

詳述Linux系統中Tomcat部署及優化
詳述Linux系統中Tomcat部署及優化
詳述Linux系統中Tomcat部署及優化詳述Linux系統中Tomcat部署及優化

  • 將壓測工具與腳本文件拖入虛擬機,並進行壓測操作

詳述Linux系統中Tomcat部署及優化詳述Linux系統中Tomcat部署及優化詳述Linux系統中Tomcat部署及優化詳述Linux系統中Tomcat部署及優化

  • 進行優化配置
    [root@localhost conf]# vim server.xml     //編輯tomcat配置文件
...//省略部分內容...
<!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               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"/>
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
...//省略部分內容...
:wq
[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.
  • 再次在客戶機中進行壓縮

詳述Linux系統中Tomcat部署及優化詳述Linux系統中Tomcat部署及優化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章