Tomcat優化

瞭解tomcat安裝

博文結構
開啓Manager管理頁面
開啓host-mangent管理頁面
分割Tomcat的運行日誌
定義Tomcat 404錯誤返回的頁面
Tomcat服務的內存優化
Tomcat線程池的優化
更改Tomcat服務的請求方式

一.開啓Manager管理頁面

當正常訪問Tomcat頁面時,會出現如下:
Tomcat優化

Tomcat優化

  • 修改tomcat配置文件(在最後添加必須在/tomcat閉合中添加如下)
[root@localhost /]# vim /usr/local/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui"/>                  \\登錄的用戶名及密碼
</tomcat-users>           \\在這個上面添加
[root@localhost /]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
\\在這個配置文件中下面這段修改一下即可
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="192.168.148.1|192.168.148.133|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />              \\允許訪問的IP,用管道符隔開
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

[root@localhost /]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost /]# /usr/local/tomcat/bin/startup.sh
  • 訪問如下
    Tomcat優化

  • 在web圖形頁面進行添加war包
[root@localhost ~]# cat index.jsp 
xws
[root@localhost ~]# jar -vcf index.war index.jsp 

Tomcat優化

Tomcat優化

Tomcat優化

二.開啓host-manager管理頁面

Tomcat優化

Tomcat優化

  • 在這個配置文件中在添加,換一個用戶名(同上)
  • 注:與上面不一樣添加這倆條
[root@localhost ~]# vim /usr/local/tomcat/conf/tomcat-users.xml 
<role rolename="admin-gui"/>
 <user username="xws" password="123456" roles="admin-gui"/>
[root@localhost ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml 
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="192.168.148.133|192.168.148.1|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
\\添加一下允許訪問的IP即可,其他不用更改
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh 
  • 訪問如下

Tomcat優化

Tomcat優化

Tomcat優化

  • 進入此頁輸入tomcat域名的信息即可,生產環境不建議使用

三.分割Tomcat的運行日誌

需要使用第三方日誌分割工具—下載cronolog日誌壓縮包

[root@localhost ~]# tar zxf cronolog-1.6.2.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/cronolog-1.6.2/
[root@localhost cronolog-1.6.2]# ./configure && make && make install
[root@localhost cronolog-1.6.2]# which cronolog   \\查看命令位置的絕對路徑
/usr/local/sbin/cronolog
[root@localhost /]# vim /usr/local/tomcat/bin/catalina.sh
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog /usr/local/tomcat/logs/test.%Y-%m-%d.out >> /dev/null &   \\在470行把原有的修改爲這個
 \\大約在471行註釋掉   #  >> "$CATALINA_OUT" 2>&1 "&"
[root@localhost /]# ls /usr/local/tomcat/logs/
catalina.2020-01-09.log  host-manager.2020-01-09.log  localhost_access_log.2020-01-09.txt  test.2020-01-09.out
catalina.out             localhost.2020-01-09.log     manager.2020-01-09.log
\\可以看到有一個test.2020-01-09.log

四.定義Tomcat 404錯誤返回的頁面

默認情況下,客戶端訪問Tomcat服務器上一個不存在的目錄時,就會提示404錯誤,而且會將我們Tomcat的版本信息顯示出來,這是非常危險的。默認的404返回的錯誤頁面如下:

Tomcat優化

  • 所以我們應該自定義一個錯誤頁面提供給客戶端
[root@localhost /]# vim /usr/local/tomcat/webapps/ROOT/error.jsp
error
[root@localhost /]# vim /usr/local/tomcat/conf/web.xml
\\大約在20幾行添加以下內容,在/version3下面添加    
  23 <error-page>
  24 <error-code>404</error-code>
  25 <location>/error.jsp</location>
  26 </error-page>
[root@localhost /]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost /]# /usr/local/tomcat/bin/startup.sh
  • 訪問如下

Tomcat優化

五.Tomcat服務的內存優化

[root@localhost /]# vim /usr/local/tomcat/bin/catalina.sh 
 #!/bin/sh                             //在第一行下面添加以下內容
 JAVA_OPTS="-Dfile.encoding=UTF-8
 -server
 -Xms1023M
 -Xmx1024M
 -XX:NewSize=512M
 -XX:MaxNewSize=1020M
 -XX:NewRatio=2
 -XX:ParallelGCThreads=15
 -XX:+DisableExplicitGC"
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
  • 驗證

Tomcat優化

Tomcat優化

配置文件中添加的各個配置項解釋如下:

-Xms:表示 JVM初始內存大小,也可以說是Java 初始化堆的大小,-Xms 與-Xmx 設成一樣的值,避免 JVM 反覆重新申請內存,導致性能大起大落,默認值爲物理內存的 1/64;
-Xmx:表示最大 Java 堆大小,當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,並且導致應用服務崩潰,因此一般建議堆的最大值設置爲可用內存的最大值的80%;
-Xmn:設置JVM最小內存(128-256就夠了,一般不設置);
-XX:NewSize:設置新生代內存大小。 新生代,對象新創建的時候分配的內存空間,老生代在垃圾回收器回收過後該對象依然沒有被回收,該對象就會移動到老生代;
-XX:PermSize:設置持久代內存大小,用於存放靜態文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應 用可能動態生成或者調用一些class,持久帶也稱爲方法區,方法區存儲每一個java類的結構信息:比如運行時常量池,字段和方法數據,構造函數和普通方法的字節碼內容以及類、實例、接口初始化時需要使用到的特殊方法等數據,JDK8中已經把持久代(PermGen Space) 幹掉了,取而代之的元空間(Metaspace)。Metaspace佔用的是本地內存,不再佔用虛擬機內存;
-XX:MaxPermSize:設置最大值持久代內存大小,永久代不屬於堆內存,堆內存只包含新生代和老年代;
-XX:NewRatio:改變新舊空間的比例,意思是新空間的尺寸是舊空間的1/8(默認爲8);
-XX:ParallelGCThreads 可用來增加並行度,需要多cpu;
-XX:+DisableExplicitGC:關閉System.gc(),簡單理解就是關閉java中的內存回收機制;

六.Tomcat線程池的優化

[root@localhost /]# vim /usr/local/tomcat/conf/server.xml 
 53   <Service name="Catalina">             //在這行內容下添加以下內容
 54         <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads=    "500" minSpareThread="4"/>

70     <Connector port="8080" protocol="HTTP/1.1"
71                executor="tomcatThreadPool"            //調用剛纔定義的規則,需手動添加
72                connectionTimeout="20000"
73                redirectPort="8443" />

116     <!--
117     <Connector port="8009" protocol="AJP/1.3"        redirectPort="8443" />                    //關閉AJPI接口原本存在,將其註釋即可!
118     -->
Excutor參數說明:

name:共享線程池的名字,這是connector爲了共享線程池要引用的名字,該名稱必須唯一
namePrefix:在JVM上,每運行線程都可以有一個name字符串,這一屬性爲線程池中每個線程的name字符串設置了一個前綴,Tomcat將把線程號追加到這一前綴後面,默認值爲tomcat-exec-
maxThreads:該線程池可以容納的最大線程數,默認200
minSpareThreads:Tomcat應該始終打開的最小不活躍線程數,默認25
Connector參數說明:
executor:表示使用參數值對應的線程池。

七.更改Tomcat服務的請求方式

  • Tomcat支持的三種請求方式
    BIO:阻塞式I/O操作,Tomcat7以下版本默認情況下是以bio模式運行的,每個請求都要創建一個線程來處理,線程開銷比較大,不適用高併發的場景,性能也最低;
    NIO:基於緩衝區,能提供非阻塞I/O操作,和傳統的BIO相比,具備更好的併發性能;
    APR(Apache portable run-time libraries):簡單理解,就是從操作系統級別解決異步IO問題,大幅度的提高服務器的處理和相應性能,也是Tomcat運行高併發的首選模式;

APR提供的主要功能模塊包括:內存分配及內存池、原子操作、文件I/O、鎖、內存映射、哈希表、網絡I/O、輪詢、進程及線程操作等等,通過採用APR,Tomcat可以獲得高度可擴展性以及優越的性能,並且可以更好的與本地服務器技術集成,從而可以使Tomcat作爲一款通用的Web服務器使用,而不僅僅作爲輕量級應用服務器。在這種情況下,Java將不再是一門側重於後端的編程語言,也可以更多的用於成熟的Web服務器平臺。

  • 更改其請求方式爲NIO(Tomcat8以上版本,默認使用的就是NIO模式)

  • 查看日誌文件
    Tomcat優化

  • 更該其請求方式爲APR方式

下載apr
下載apr-util

[root@localhost /]# yum -y install apr-devel openssl-devel
[root@localhost ~]# tar zxf apr-1.5.2.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/apr-1.5.2/
[root@localhost apr-1.5.2]# ./configure --prefix=/usr/local/apr && make && make install
[root@localhost ~]# tar zxf apr-util-1.5.4.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/apr-util-1.5.4/
[root@localhost apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
[root@localhost apr-util-1.5.4]# cd /usr/local/tomcat/bin/
[root@localhost bin]# tar zxf tomcat-native.tar.gz 
[root@localhost bin]# cd tomcat-native-1.2.18-src/native/
[root@localhost native]# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk1.8.0_211 && make && make install
\\編譯安裝tomcat自帶的tomcat-native軟件包
[root@localhost ~]# vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
\\在最下面添加即可
[root@localhost ~]# source /etc/profile  \\更新環境變量
[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# openssl genrsa -out ca.key 4096  \\ 生成所需祕鑰
Generating RSA private key, 4096 bit long modulus
....................................................++
.........................................................................++
e is 65537 (0x10001)
[root@localhost tomcat]# openssl req -new -x509 -days 7304 -key ca.key -out ca.crt
\\提示隨便輸入即可
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml          //編寫tomcat主配置文件
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"            //更改端口爲443
                maxThreads="150" SSLEnabled="true" >
         <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />        //升級爲http 2.0協議
         <SSLHostConfig>
             <Certificate certificateKeyFile="/usr/local/tomcat/ca.key"        //更改祕鑰存放路徑
                          certificateFile="/usr/local/tomcat/ca.crt"               //更改證書存放路徑
                          type="RSA" />
         </SSLHostConfig>
     </Connector>
\\大約在88頁有一個模板,把註釋去掉,更改一下即可
[root@localhost logs]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost logs]# /usr/local/tomcat/bin/startup.sh                //重新啓動tomcat服務
[root@localhost tomcat]# netstat -anpt | grep 443
tcp6       0      0 :::443                  :::*                    LISTEN      34771/java   
\\確定443端口已經開啓
  • 訪問如下

Tomcat優化

Tomcat優化

Tomcat優化

[root@localhost ~]# cat /usr/local/tomcat/logs/test.2019-12-09.out | grep apr
//根據查看tomat的日誌來了解tomcat的工作模式

Tomcat優化

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