Tomcat學習總結(3)——Tomcat優化詳細教程
Tomcat是我們經常使用的 servlet容器之一,甚至很多線上產品都使用 Tomcat充當伺服器。而且優化後的Tomcat效能提升顯著,本文從以下幾方面進行分析優化。
一、記憶體優化
預設情況下Tomcat的相關記憶體配置較低,這對於一些大型專案顯然是不夠用的,這些專案執行就已經耗費了大部分記憶體空間,何況大規模訪問的情況。即使是本文中的這個只有一個頁面的超小專案,在併發達到一定程度後也會丟擲以下類似異常:
Java程式碼-
嚴重: Exception invoking periodic operation: java.lang.OutOfMemoryError: Java heap space
- 嚴重: Error processing request java.lang.OutOfMemoryError: GC overhead limit exceeded
1.修改記憶體等 JVM相關配置
Linux下修改TOMCAT_HOME/bin/catalina.sh,在其中加入,可以放在CLASSPATH=下面:
Java程式碼-
JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m"
windows下修改TOMCAT_HOME/bin/catalina.bat,在其中加入,可以放在set CLASSPATH=下面:
Java程式碼- set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m
-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程式碼- jps
- #顯示以下結果
- 2340 Bootstrap
- 6696 Jps
其中 Bootstrap程序就是我們啟動了的 Tomcat,其程序號為2340.
然後我們利用 jmap工具檢視其記憶體相關配置:
Java程式碼- jmap -heap 2340
- #顯示以下結果
- Attaching to process ID 2340, please wait...
- Debugger attached successfully.
- Server compiler detected.
- JVM version is 24.65-b04
- using thread-local object allocation.
- Parallel GC with 4 thread(s)
- Heap Configuration:
- MinHeapFreeRatio = 0
- MaxHeapFreeRatio = 100
- MaxHeapSize = 2147483648 (2048.0MB) //最大堆記憶體
- NewSize = 1310720 (1.25MB)
- MaxNewSize = 17592186044415 MB
- OldSize = 5439488 (5.1875MB)
- NewRatio = 2
- SurvivorRatio = 8
- PermSize = 536870912 (512.0MB) //永久代初始大小
- MaxPermSize = 1073741824 (1024.0MB) //永久代最大大小
- G1HeapRegionSize = 0 (0.0MB)
- Heap Usage:
- PS Young Generation
- Eden Space:
- capacity = 537919488 (513.0MB)
- used = 247606720 (236.13616943359375MB)
- free = 290312768 (276.86383056640625MB)
- 46.03044238471613% used
- From Space:
- capacity = 89128960 (85.0MB)
- used = 0 (0.0MB)
- free = 89128960 (85.0MB)
- 0.0% used
- To Space:
- capacity = 89128960 (85.0MB)
- used = 0 (0.0MB)
- free = 89128960 (85.0MB)
- 0.0% used
- PS Old Generation
- capacity = 1431830528 (1365.5MB)
- used = 0 (0.0MB)
- free = 1431830528 (1365.5MB)
- 0.0% used
- PS Perm Generation
- capacity = 536870912 (512.0MB)
- used = 20770360 (19.80815887451172MB)
- free = 516100552 (492.1918411254883MB)
- 3.86878103017807% used
- 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程式碼- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
其中port代表服務介面;protocol代表協議型別;connectionTimeout代表連線超時時間,單位為毫秒;redirectPort代表安全通訊(https)轉發埠,一般配置成443。
可以看到除了這幾個基本配置外並無特殊功能,所以我們需要對 Connector 進行擴充套件。
其中Connector 支援引數屬性可以參考Tomcat官方網站(https://tomcat.apache.org/tomcat-8.0-doc/config/http.html),非常多,所以本文就只介紹些常用的。
我們將 Connector 配置修改為如下:
Java程式碼- <Connector port="8080"
- protocol="HTTP/1.1"
- maxThreads="1000"
- minSpareThreads="100"
- acceptCount="1000"
- maxConnections="1000"
- connectionTimeout="20000"
- maxHttpHeaderSize="8192"
- tcpNoDelay="true"
- compression="on"
- compressionMinSize="2048"
- disableUploadTimeout="true"
- redirectPort="8443"
- enableLookups="false"
- 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多種客戶