##硬件方面java
服務器資源apache
單個服務器所能提供CPU、內存、硬盤的性能對處理能力有決定性影響,因此說服務器性能好,Tomcat也不會太差。固然提升服務器的硬件配置,是須要大量RMB的支持的。因此不到萬不得已不會採用這種方式,通常公司會採起下面這種經過優化配置,來提高Tomcat性能的方式。tomcat
##軟件方面服務器
優化配置網絡
優化配置以前須要配置一個tomcat管理員帳戶,來登陸查看Tomcat控制檯提升的各類參數。 在conf/ tomcat-users.xml下添加用戶:架構
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
複製代碼
tomcat的3種運行模式併發
BIO: 默認的模式,同步阻塞模式,性能很是低下,沒有通過任何優化處理和支持.異步
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)更好的併發運行性能。jvm
APR: 安裝起來最困難,可是從操做系統級別來解決異步的IO問題,大幅度的提升性能.socket
以NIO模式爲例子:
啓動NIO模式 修改server.xml裏的Connector節點,修改protocol爲org.apache.coyote.http11.Http11NioProtocol
啓動tomcat,登陸查看信息:http://127.0.0.1:8080/執行器優化(使用線程池)
在tomcat中每個用戶請求都是一個線程,因此可使用線程池提升性能。 開啓而且使用 配置:
查看Tomcat控制檯
複製代碼
**Executor標籤重要參數說明:**
name:共享線程池的名字。這是Connector爲了共享線程池要引用的名字,該名字必須惟一。默認值:None;
namePrefix:在JVM上,每一個運行線程均可以有一個name 字符串。這一屬性爲線程池中每一個線程的name字符串設置了一個前綴,Tomcat將把線程號追加到這一前綴的後面。默認值:tomcat-exec-;
maxThreads:該線程池能夠容納的最大線程數。默認值:200;
maxIdleTime:在Tomcat關閉一個空閒線程以前,容許空閒線程持續的時間(以毫秒爲單位)。只有當前活躍的線程數大於minSpareThread的值,纔會關閉空閒線程。默認值:60000(一分鐘)。
minSpareThreads:Tomcat應該始終打開的最小不活躍線程數。默認值:25。
threadPriority:線程的等級。默認是Thread.NORM_PRIORITY
**Connector重要參數說明:**
executor:表示使用該參數值對應的線程池;
minProcessors:服務器啓動時建立的處理請求的線程數;
maxProcessors:最大能夠建立的處理請求的線程數;
maxThreads: Tomcat使用線程來處理接收的每一個請求。這個值表示Tomcat可建立的最大的線程數。默認值150。
acceptCount: 指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理。默認值10。
minSpareThreads: Tomcat初始化時建立的線程數。默認值25。
maxSpareThreads: 一旦建立的線程超過這個值,Tomcat就會關閉再也不須要的socket線程。默認值75。
enableLookups: 是否反查域名,默認值爲true。爲了提升處理能力,應設置爲false
connnectionTimeout: 網絡鏈接超時,默認值60000,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。一般可設置爲30000毫秒。
maxKeepAliveRequests: 保持請求數量,默認值100。 bufferSize: 輸入流緩衝大小,默認值2048 bytes。
compression: 壓縮傳輸,取值on/off/force,默認值off。 其中和最大鏈接數相關的參數爲maxThreads和acceptCount。若是要加大併發鏈接數,應同時加大這兩個參數。
複製代碼
禁用AJP鏈接器(在通常項目中使用Nginx+tomcat的架構)
AJP(Apache JServer Protocol) AJPv13協議是面向包的。WEB服務器和Servlet容器經過TCP鏈接來交互;爲了節省SOCKET建立的昂貴代價,WEB服務器會嘗試維護一個永久TCP鏈接到servlet容器,而且在多個請求和響應週期過程會重用鏈接。如圖
在Nginx+tomcat的架構中,禁用AJP鏈接器 查看管理界面中查看:JVM的參數的優化
根據服務器物理內容狀況配置相關參數優化tomcat性能。當應用程序須要的內存超出堆的最大值時虛擬機就會提示內存溢出,而且致使應用服務崩潰。所以通常建議堆的最大值設置爲可用內存的最大值的80%。 Tomcat默承認以使用的內存爲128MB,在較大型的應用項目中,這點內存是不夠的,須要調大.
Tomcat默承認以使用的內存爲128MB,Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增長以下設置: JAVA_OPTS=’-Xms【初始化內存大小】 -Xmx【可使用的最大內存】 -XX:PermSize=64M -XX:MaxPermSize=128m’ 須要把幾個參數值調大。例如: JAVA_OPTS=’-Xms256m -Xmx512m’ 表示初始化內存爲256MB,可使用的最大內存爲512MB。
參數的詳解:
-server 啓用jdk 的 server 版;
-Xms java虛擬機初始化時的最小內存;
-Xmx java虛擬機可以使用的最大內存;
-XX:PermSize 內存永久保留區域
-XX:MaxPermSize 內存最大永久保留區域
-Xmn jvm最小內存
複製代碼
32G的機器的配置例子:
JAVA_OPTS="$JAVA_OPTS -Xms10g -Xmx10g -XX:PermSize=1g -XX:MaxPermSize=2g -Xshare:off -Xmn1024m複製代碼