1. 程式人生 > >Tomcat學習總結(3)——Tomcat優化詳細教程

Tomcat學習總結(3)——Tomcat優化詳細教程

 Tomcat是我們經常使用的 servlet容器之一,甚至很多線上產品都使用 Tomcat充當伺服器。而且優化後的Tomcat效能提升顯著,本文從以下幾方面進行分析優化。

        一、記憶體優化

        預設情況下Tomcat的相關記憶體配置較低,這對於一些大型專案顯然是不夠用的,這些專案執行就已經耗費了大部分記憶體空間,何況大規模訪問的情況。即使是本文中的這個只有一個頁面的超小專案,在併發達到一定程度後也會丟擲以下類似異常:

Java程式碼  收藏程式碼
  1. 嚴重: Exception invoking periodic operation: java.lang.OutOfMemoryError: Java heap space  
  2. 嚴重: Error processing request java.lang.OutOfMemoryError: GC overhead limit exceeded  
        說明Tomcat已經無力支援訪問處理,內部GC也已經“無能無力”。所以一般情況下我們需要重新配置Tomcat的相關記憶體大小。

        1.修改記憶體等 JVM相關配置

        Linux下修改TOMCAT_HOME/bin/catalina.sh,在其中加入,可以放在CLASSPATH=下面:

Java程式碼  收藏程式碼
  1. JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m"
      

        windows下修改TOMCAT_HOME/bin/catalina.bat,在其中加入,可以放在set CLASSPATH=下面:

Java程式碼  收藏程式碼
  1. set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m  
        這些引數在我們學習JVM部分文章時已經都認識過了,不過這裡還是簡單介紹下:

        -server:啟用 JDK的 server 版本;

        -Xms:Java虛擬機器初始化時堆的最小記憶體,一般與 Xmx配置為相同值,這樣的好處是GC不必再為擴充套件記憶體空間而消耗效能;

        -Xmx:Java虛擬機器可使用堆的最大記憶體;

        -XX:PermSize:Java虛擬機器永久代大小;

        -XX:MaxPermSize:Java虛擬機器永久代大小最大值;

        除了這些引數外您還可以根據具體需要配置其他引數,引數的配置可以參考JVM引數的配置

        2.驗證

        設定成功後我們可以利用JDK自帶的工具進行驗證,這些工具都在JAVA_HOME/bin目錄下:

        1)jps:用來顯示本地的java程序,以及程序號,程序啟動的路徑等。

        2)jmap:觀察執行中的JVM 實體記憶體的佔用情況,包括Heap size , Perm size 下載地址 等。

        進入命令列模式後,進入JAVA_HOME/bin目錄下,然後輸入jps命令:

Java程式碼  收藏程式碼
  1. jps  
  2. #顯示以下結果  
  3. 2340 Bootstrap  
  4. 6696 Jps  

        其中 Bootstrap程序就是我們啟動了的 Tomcat,其程序號為2340.

        然後我們利用 jmap工具檢視其記憶體相關配置:

Java程式碼  收藏程式碼
  1. jmap -heap 2340  
  2. #顯示以下結果  
  3. Attaching to process ID 2340, please wait...  
  4. Debugger attached successfully.  
  5. Server compiler detected.  
  6. JVM version is 24.65-b04  
  7. using thread-local object allocation.  
  8. Parallel GC with 4 thread(s)  
  9. Heap Configuration:  
  10.    MinHeapFreeRatio = 0  
  11.    MaxHeapFreeRatio = 100  
  12.    MaxHeapSize      = 2147483648 (2048.0MB)    //最大堆記憶體  
  13.    NewSize          = 1310720 (1.25MB)  
  14.    MaxNewSize       = 17592186044415 MB  
  15.    OldSize          = 5439488 (5.1875MB)  
  16.    NewRatio         = 2  
  17.    SurvivorRatio    = 8  
  18.    PermSize         = 536870912 (512.0MB)      //永久代初始大小  
  19.    MaxPermSize      = 1073741824 (1024.0MB)    //永久代最大大小  
  20.    G1HeapRegionSize = 0 (0.0MB)  
  21. Heap Usage:  
  22. PS Young Generation  
  23. Eden Space:  
  24.    capacity = 537919488 (513.0MB)  
  25.    used     = 247606720 (236.13616943359375MB)  
  26.    free     = 290312768 (276.86383056640625MB)  
  27.    46.03044238471613% used  
  28. From Space:  
  29.    capacity = 89128960 (85.0MB)  
  30.    used     = 0 (0.0MB)  
  31.    free     = 89128960 (85.0MB)  
  32.    0.0% used  
  33. To Space:  
  34.    capacity = 89128960 (85.0MB)  
  35.    used     = 0 (0.0MB)  
  36.    free     = 89128960 (85.0MB)  
  37.    0.0% used  
  38. PS Old Generation  
  39.    capacity = 1431830528 (1365.5MB)  
  40.    used     = 0 (0.0MB)  
  41.    free     = 1431830528 (1365.5MB)  
  42.    0.0% used  
  43. PS Perm Generation  
  44.    capacity = 536870912 (512.0MB)  
  45.    used     = 20770360 (19.80815887451172MB)  
  46.    free     = 516100552 (492.1918411254883MB)  
  47.    3.86878103017807% used  
  48. 12005 interned Strings occupying 1039352 bytes.  

        從結果就可以看出我們的配置已經成功了。

        二、配置優化

        我們知道TOMCAT_HOME/conf/server.xml可以配置埠,虛擬路徑等等 Tomcat相關主要配置。

        1.Connector 優化

        Connector是聯結器,負責接收客戶的請求,以及向客戶端回送響應的訊息。所以 Connector的優化是重要部分。預設情況下 Tomcat只支援200執行緒訪問,超過這個數量的連線將被等待甚至超時放棄,所以我們需要提高這方面的處理能力。

        修改這部分配置需要修改TOMCAT_HOME/conf/server.xml,開啟server.xml找到Connector 標籤項,預設配置如下:

Xml程式碼  收藏程式碼
  1. <Connector port="8080" protocol="HTTP/1.1"  
  2.            connectionTimeout="20000"  
  3.            redirectPort="8443" />  

        其中port代表服務介面;protocol代表協議型別;connectionTimeout代表連線超時時間,單位為毫秒;redirectPort代表安全通訊(https)轉發埠,一般配置成443。

        可以看到除了這幾個基本配置外並無特殊功能,所以我們需要對 Connector 進行擴充套件。

        其中Connector 支援引數屬性可以參考Tomcat官方網站(https://tomcat.apache.org/tomcat-8.0-doc/config/http.html),非常多,所以本文就只介紹些常用的。

        我們將 Connector 配置修改為如下:

Java程式碼  收藏程式碼
  1. <Connector port="8080"   
  2.           protocol="HTTP/1.1"   
  3.           maxThreads="1000"   
  4.           minSpareThreads="100"   
  5.           acceptCount="1000"  
  6.           maxConnections="1000"  
  7.           connectionTimeout="20000"   
  8.           maxHttpHeaderSize="8192"  
  9.           tcpNoDelay="true"  
  10.           compression="on"  
  11.           compressionMinSize="2048"  
  12.           disableUploadTimeout="true"  
  13.           redirectPort="8443"  
  14.       enableLookups="false"  
  15.           URIEncoding="UTF-8" />  

        1)port:代表Tomcat監聽埠,也就是網站的訪問埠,預設為8080,可以根據需要改成其他。

        2)protocol:協議型別,可選型別有四種,分別為BIO(阻塞型IO),NIO,NIO2和APR。

        (1)BIO:BIO(Blocking I/O),顧名思義,即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。Tomcat在預設情況下,是以bio模式執行的。遺憾的是,就一般而言,bio模式是三種執行模式中效能最低的一種。BIO配置採用預設即可。

        (2)NIO:NIO(New I/O),是Java SE 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩衝區、並能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統I/O操作(bio)更好的併發執行效能。要讓Tomcat以nio模式來執行也比較簡單,我們只需要protocol型別修改為:

相關推薦

Tomcat學習總結3——Tomcat優化詳細教程

 Tomcat是我們經常使用的 servlet容器之一,甚至很多線上產品都使用 Tomcat充當伺服器。而且優化後的Tomcat效能提升顯著,本文從以下幾方面進行分析優化。         一、記憶體優化         預設情況下Tomcat的相關記

Tomcat學習總結13—— Tomcat常用參數配置說明

標簽 cat -xms windows ssi 端口配置 cto 出現 tomcat 1、修改端口號 Tomcat端口配置在server.xml文件的Connector標簽中,默認為8080,可根據實際情況修改。 修改端口號 2、解決URL中文參數亂碼 在server.x

Tomcat學習總結2——Tomcat部署Java War包應用教程

一、打包JavaWeb應用  在Java中,使用"jar"命令來對將JavaWeb應用打包成一個War包,jar命令的用法如下:範例:將JavaWebDemoProject這個JavaWeb應用打包成w

Tomcat學習總結1——Tomcat入門教程

一、Tomcat伺服器埠的配置  Tomcat的所有配置都放在conf資料夾之中,裡面的server.xml檔案是配置的核心檔案。  如果想修改Tomcat伺服器的啟動埠,則可以在server.xml配

Tomcat學習總結6—— Tomcat叢集配置

現目前基於javaWeb開發的應用系統已經比比皆是,尤其是電子商務網站,要想網站發展壯大,那麼必然就得能夠承受住龐大的網站訪問量;大家知道如果伺服器訪問量過大,就會出現服應用務器崩潰的情況,這個時候怎麼辦,難道就只能去重啟伺服器嗎?好,如果是一般的小型公益網站到也無所謂,

Tomcat學習總結14—— Tomcat常見面試題

一、Tomcat的預設是多少,怎麼修改 Tomcat的預設埠號是8080. 修改Tomcat埠號: 1.找到Tomcat目錄下的conf資料夾 2.進入conf資料夾裡面找到server.x

Git學習總結1——Git使用詳細教程

一:Git是什麼?   Git是目前世界上最先進的分散式版本控制系統。   二:SVN與Git的最主要的區別?   SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器哪裡得到最新的版本,然後幹活,幹完後

Tomcat學習總結11——Linux下的Tomcat安全優化

app span must 以及 站點 with rip web.xml dev 1、web.xml配置及修改: 站點默認主頁: <welcome-file-list> <welcome-file>index.html</welcome-fil

Tomcat學習總結6——Tomca常用配置詳解

mar evel 代碼段 between 取消 新建 unp -h tom 註:Tomcat 8需要JRE7以上的JRE 1. Tomcat環境變量設置 1.1 Java環境變量設置 右鍵計算機—屬性—高級系統設置—環境變量,在”系統環境變量”,設置如下三個變量(如果變量已

Spring-batch學習總結3—ItemReader普通文件,數據庫,XML,多文件數據讀取

調用 configure sco value getcount asc ash rst desc Spring-Batch學習總結(3)——如何數據輸入一.ItemReader概述1.ItemReader:提供數據的接口2.在這個接口中只有一個方法read(),它讀取一個數

《實戰Java高併發程式設計》學習總結3

第6章  java8與併發 1 顯式函式指函式與外界交換資料的唯一渠道就是引數和返回值,顯式函式不會去讀取或者修改函式的外部狀態。這樣的函式對於除錯和排錯是有益的。 2 函數語言程式設計式申明式的程式設計方式。而命令式則喜歡大量使用可變物件和指令。如下 // 指令式程式設計 p

Python--列表list、元組(tuple)、字典dict 學習總結3

目錄 查: 增 / 改: 刪: (3)、字典 1、字典的定義 字典使用   { }   來定義 字典使用  鍵值對 儲存資料,鍵值對之間使用  ,

Mysql學習總結61——MySQL優化之DBA級優化整理彙總

資料庫優化的可以從如下幾個方面著手: 1.>sql語句和索引. 2.>資料庫表結構. 3.>系統配置. 4.>硬體 2.使用MySQL的慢查詢日誌對效率有問題的sql進行監控 1.>檢視慢查詢日誌是否開啟:show variabl

訊息中介軟體學習總結3——RocketMQ之十分鐘入門RocketMQ

本文首先引出訊息中介軟體通常需要解決哪些問題,在解決這些問題當中會遇到什麼困難,Apache RocketMQ作為阿里開源的一款高效能、高吞吐量的分散式訊息中介軟體否可以解決,規範中如何定義這些問題。然後本文將介紹RocketMQ的架構設計,以期讓讀者快速瞭解RocketMQ

MySQL學習總結3-庫級操作語句

1.建立資料庫  create {database | schema} [if not exists] db_name [default] character set [=] charset_name; 注:{a|b}  ab中必選一個;[a]  a

tensorflow學習筆記3優化器optimizer

Ⅰ.class tf.train.Optimizer 優化器(optimizers)類的基類。這個類定義了在訓練模型的時候新增一個操作的API。你基本上不會直接使用這個類,但是你會用到他的子類比如GradientDescentOptimizer, AdagradOptimi

ZooKeeper學習總結3——ZooKeeper常見面試題

Zookeeper是什麼框架 分散式的、開源的分散式應用程式協調服務,原本是Hadoop、HBase的一個重要元件。它為分散式應用提供一致性服務的軟體,包括:配置維護、域名服務、分散式同步、組服務等。應用場景 Zookeeper的功能很強大,應用場景很多,結合我實際工作中使用Dubbo框架的情況,Zookee

Docker學習總結3——Docker實戰之入門以及Dockerfile

應用映象 csphere/wordpress:4.2 # cd docker-training/wordpress/ # ls -a . license.txt wp-config-sample.php wp-login.

深度學習總結各種優化演算法

一.優化演算法介紹 1.批量梯度下降(Batch gradient descent,BGD) θ=θ−η⋅∇θJ(θ) 每迭代一步,都要用到訓練集的所有資料,每次計算出來的梯度求平均 η代表學習率LR 2.隨機梯度下降(Stochas

RabbitMQ學習總結3——入門例項教程詳解

一、起航        本章節,柯南君將從幾個層面,用官網例子講解一下RabbitMQ的實操經典程式案例,讓大家重新回到經典“Hello world!”(The simplest thing that does something )時代,RabbitMQ 支援N多種客戶