優化tomcat配置(從記憶體、併發、快取4個方面)
Tomcat在各位JavaWeb從業者常常就是預設的開發環境,但是Tomcat的預設配置作為生產環境,尤其是記憶體和執行緒的配置,預設都很低,容易成為效能瓶頸.
幸好Tomcat還有很多的提升空間.下文介紹一下Tomcat優化,可以分為記憶體,執行緒,IO.
一:Tomcat記憶體優化,啟動時告訴JVM我要一塊大記憶體(調優記憶體是最直接的方式)
Windows 下的catalina.bat
Linux 下的catalina.sh 如:
JAVA_OPTS='-Xms256m -Xmx512m'
-Xms<size> JVM初始化堆的大小
-Xmx<size> JVM堆的最大值 實際引數大小根據伺服器配置或者專案具體設定.
二:Tomcat 執行緒優化 在server.xml中 如:
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"
connectionTimeout="20000" />
maxThreads="X" 表示最多同時處理X個連線
minSpareThreads="X" 初始化X個連線
maxSpareThreads="X" 表示如果最多可以有X個執行緒,一旦超過X個,則會關閉不在需要的執行緒
acceptCount="X" 當同時連線的人數達到maxThreads時,還可以排隊,佇列大小為X.超過X就不處理
三:Tomcat IO優化
1:同步阻塞IO(JAVA BIO) 同步並阻塞,伺服器實現模式為一個連線一個執行緒(one connection one thread 想想都覺得恐怖,執行緒可是非常寶貴的資源),當然可以通過執行緒池機制改善.
2:JAVA NIO:又分為同步非阻塞IO,非同步阻塞IO 與BIO最大的區別one request one thread.可以複用同一個執行緒處理多個connection(多路複用).
3:,非同步非阻塞IO(Java NIO2又叫AIO) 主要與NIO的區別主要是作業系統的底層區別.可以做個比喻:比作快遞,NIO就是網購後要自己到官網查下快遞是否已經到了(可能是多次),然後自己去取快遞;AIO就是快遞員送貨上門了(不用關注快遞進度)。
BIO方式適用於連線數目比較小且固定的架構,這種方式對伺服器資源要求比較高,併發侷限於應用中,JDK1.4以前的唯一選擇,但程式直觀簡單易理解.
NIO方式適用於連線數目多且連線比較短(輕操作)的架構,比如聊天伺服器,併發侷限於應用中,程式設計比較複雜,JDK1.4開始支援.
AIO方式使用於連線數目多且連線比較長(重操作)的架構,比如相簿伺服器,充分呼叫OS參與併發操作,程式設計比較複雜,JDK7開始支援.
在server.xml中
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443" />
實現對Tomcat的IO切換.
四:大殺器APR
APR是從作業系統級別來解決非同步的IO問題,大幅度的提高效能. (http://apr.apache.org/).
APR(Apache Portable Runtime)是一個高可移植庫,它是Apache HTTP Server 2.x的核心.能更好地和其它本地web技術整合,總體上讓Java更有效率作為一個高效能web伺服器平臺而不是簡單作為後臺容器.
在產品環境中,特別是直接使用Tomcat做WEB伺服器的時候,應該使用Tomcat Native來提高其效能.如果不配APR,基本上300個執行緒狠快就會用滿,以後的請求就只好等待.但是配上APR之後,併發的執行緒數量明顯下降,從原來的300可能會馬上下降到只有幾十,新的請求會毫無阻塞的進來.
在區域網環境測,就算是400個併發,也是一瞬間就處理/傳輸完畢,但是在真實的Internet環境下,頁面處理時間只佔0.1%都不到,絕大部分時間都用來頁面傳輸.如果不用APR,一個執行緒同一時間只能處理一個使用者,勢必會造成阻塞。所以生產環境下用apr是非常必要的.
安裝Apache Tomcat Native Library,直接啟動就支援apr(http://tomcat.apache.org/native-doc/)它本身是基於APR的. 具體安裝方法可以參考其他部落格和文章. 排除程式碼問題Tomcat優化到這個層次,可以應對大部分效能需求.
Tomcat有很多方面,我從記憶體、併發、快取四個方面介紹優化方法。
**
一.Tomcat記憶體優化
**
Tomcat記憶體優化主要是對 tomcat 啟動引數優化,我們可以在 tomcat 的啟動指令碼 catalina.sh 中設定 java_OPTS 引數。
JAVA_OPTS引數說明
-server 啟用jdk 的 server 版;
-Xms Java虛擬機器初始化時的最小記憶體;
-Xmx java虛擬機器可使用的最大記憶體;
-XX: PermSize 記憶體永久保留區域
-XX:MaxPermSize 記憶體最大永久保留區域
伺服器引數配置
現公司伺服器記憶體一般都可以加到最大2G ,所以可以採取以下配置:
JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
配置完成後可重啟Tomcat ,通過以下命令進行檢視配置是否生效:
首先檢視Tomcat 程序號:
sudo lsof -i:9027
我們可以看到Tomcat 程序號是 12222 。
檢視是否配置生效:
sudo jmap – heap 12222
我們可以看到MaxHeapSize 等引數已經生效。
**
二.Tomcat併發優化
**
1.Tomcat連線相關引數
在Tomcat 配置檔案 server.xml 中的
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.調整聯結器connector的併發處理能力
1>引數說明
maxThreads 客戶請求最大執行緒數
minSpareThreads Tomcat初始化時建立的 socket 執行緒數
maxSpareThreads Tomcat聯結器的最大空閒 socket 執行緒數
enableLookups 若設為true, 則支援域名解析,可把 ip 地址解析為主機名
redirectPort 在需要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 埠
acceptAccount 監聽埠佇列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads )
connectionTimeout 連線超時
minProcessors 伺服器建立時的最小處理執行緒數
maxProcessors 伺服器同時最大處理執行緒數
URIEncoding URL統一編碼
2>Tomcat中的配置示例
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
3.Tomcat快取優化
1>引數說明
c ompression 開啟壓縮功能
compressionMinSize 啟用壓縮的輸出內容大小,這裡面預設為2KB
compressableMimeType 壓縮型別
connectionTimeout 定義建立客戶連線超時的時間. 如果為 -1, 表示不限制建立客戶連線的時間
2>Tomcat中的配置示例
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
4.參考配置
1>舊有的配置
參考網路對伺服器做過如下配置,拿出來分享下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
後來發現在訪問量達到3 百萬多的時候出現效能瓶頸。
2>更改後的配置
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 =
相關推薦
簡述效能優化tomcat配置(從記憶體、併發、快取方面)優化及壓力測試
Tomcat有很多方面,我綜合網上文章和自己的優化過程簡單概括。 一.Tomcat記憶體優化 Tomcat記憶體優化主要是對 tomcat 啟動引數優化,我們可以在 tomcat 的啟動指令碼 catalina.sh 中設定 java_OPTS 引數。 JAVA_OPTS引
優化tomcat配置(從記憶體、併發、快取4個方面)
Tomcat在各位JavaWeb從業者常常就是預設的開發環境,但是Tomcat的預設配置作為生產環境,尤其是記憶體和執行緒的配置,預設都很低,容易成為效能瓶頸. 幸好Tomcat還有很多的提升空間.下文介紹一下Tomcat優化,可以分為記憶體,執行緒,IO.
優化tomcat配置(從內存、並發、緩存4個方面)優化
公司 應該 adt 打開 mx2 type 內存 主機名 socket Tomcat內存優化 Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 java_OPTS 參數。 JAVA_OPTS參數說
如何優化tomcat配置(從內存、並發、緩存4個方面)優化
news 同時 java 線程 進程 文件 protocol 連接超時 tac 一.Tomcat內存優化 Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 java_OPTS 參數。 JAVA
優化tomcat配置(從內存、並發、緩存)優化
ups uri attr socket 公司 itl bsp perm script 一.Tomcat內存優化 ** Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 java_OPTS 參數
處理器、程序、執行緒、並行、併發、記憶體模型的相關概念、併發程式設計中的三個概念 、Java記憶體模型、剖析volatile關鍵字、用volatile關鍵字的場景
處理器:即中央處理器(CPU,Central Processing Unit),它是一塊超大規模的積體電路,是一臺計算機的運算核心(Core)和控制核心( Control Unit)。它的功能主要是解釋計算機指令以及處理計算機軟體中的資料。 程序:程序(Process)是計算機中的程式關
tengine整合tomcat加上memcached實現高併發、負載均衡、可擴充套件架構
1、高可用、負載均衡、可擴充套件架構的需要背景 2、系統架構 3、系統規劃及說明 4、系統部署及測試 5、總結 1、高可用、負載均衡、可擴充套件架構的需要背景 從網際網路誕生以來,網站架構隨著網際網路的快速發展發生著巨大的變化,現今,資料每天都在以爆
同步、非同步、阻塞、非阻塞、並行、併發、共享資源的同步
同步阻塞呼叫:得不到結果不返回,執行緒進入阻塞態等待。 同步非阻塞呼叫:得不到結果不返回,執行緒不阻塞一直在CPU執行。 非同步阻塞呼叫:去到別的執行緒,讓別的執行緒阻塞起來等待結果,自己不阻塞。 非同步非阻塞呼叫:去到別的執行緒,別的執行緒一直在執行,直到得出結果。
利用python指令碼執行tcpdump抓包,支援傳參、併發抓取多個包、檔案迴圈覆蓋抓取
#!/usr/bin/env python # AUTH: [email protected] """ tcpdump -i any -s 0 -w /opt/log/tcpdump/2018-07-19--10-43-30.pcap tcp and
【裝】並行、併發、同步、互斥
並行 計算機作業系統中的並行,指的是同時存在於記憶體中的多道作業都處於執行狀態。實際上都是巨集觀上並行,微觀上序列,因為這些作業都是開始各自的執行,但都沒執行完畢,只是交替地使用cpu。 在作業系統中是指,一組程式按獨立非同步的速度執行,
Java基礎學習總結(104)——多執行緒、併發、工具類相關的面試題
執行緒的概念 執行緒是程式執行的最小單位,也是作業系統排程和分派CPU的最小單元,是程序中的一個實體,是程序中的實際運作單位。可以在一個程序中啟動多個執行緒來完成不同的任務,這些執行緒共享該程序擁有的資源。 執行緒程序區別 程序是程式的實體,也是執行緒的容器,一個程序可以包含多個執行緒,程序是資源分配的基本單
PHP session鎖、併發、覆蓋問題解析
本文分享PHP的session在使用過程中的鎖和併發的問題,與之相關的現象有請求阻塞、session資料丟失、session資料讀不到。 我登入不了了 某天,我準備登入我們一個後臺系統,前去解決一個bug,在賬戶密碼驗證碼都準確輸入的情況下,我登入不上,經過多次實驗發現主要有兩個錯誤資訊: csrf驗證
資料庫事務特性、併發、隔離級別、鎖種類、鎖粒度
本文解釋資料庫併發控制 事務 對資料庫資料執行的一系列操作,可以是一條或者多條SQL語句 資料庫事務特性 1、 原子性 對資料庫資料的一系列操作,要麼全部執行,要麼都不
快取失效、穿透、併發、雪崩問題及解決方法
1 快取失效 引起這個原因的主要因素是高併發下,一般設定一個快取的過期時間時,併發很高時可能會出在某一個時間同時生成很多的快取,並且過期時間在同一時刻,這個時候就可能引發——當過期時間到後,這些快取同時失效,請求全部轉發到DB,DB可能會壓力過重。
並行、併發、synchonrized同步的用法
一、多執行緒的併發與並行: 併發:多個執行緒同時都處在執行中的狀態。執行緒之間相互干擾,存在競爭,(CPU,緩衝區),每個執行緒輪流使用CPU,當一個執行緒佔有CPU時,其他執行緒處於掛起狀態,各執行緒斷續推進。 並行:多個執行緒同時執行,但是每個執行緒各自有自己的C
資料庫管理(事務、ACID、併發、封鎖、可序列化、隔離)
1、資料庫事務 1.1 資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作。 1.2 事務的4個特性(ACID):(1)原子性(atomic)(atomicity)事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。通常,與某個事務關聯的操作
協程、同步非同步、併發、並行、rabbitmq、分散式任務佇列
http://docs.jinkan.org/docs/celery/ 協程 協程不是程序或執行緒,其執行過程更類似於不帶返回值的函式呼叫。 一個程式可以包含多個協程,可以對比與一個程序包含多個執行緒。我們知道多個執行緒相對獨立,有自己的上下文,切換受系統控制;而協程也相對獨立,有自己的上下文,但是
並行、併發、同步和互斥
並行 計算機作業系統中的並行,指的是同時存在於記憶體中的多道作業都處於執行狀態。實際上都是巨集觀上並行,微觀上序列,因為這些作業都是開始各自的執行,但都沒執行完畢,只是交替地使用cpu。 在作業系統中是指,一組程式按獨立非同步的速度執行,不等於時間上的重疊(同
橫向、縱向充滿螢幕(4個按鈕正好各佔1/4螢幕面積(居中))——田字格
田字格 amxl <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" an
做seo優化一貫沒有排名你可能犯了這4個錯誤
對於那些剛開始從業seo優化排名的工作人員來說,需要注意和學習的地方有很多,但是不管怎麼學習,不管怎麼操作,所做的所有目的都是為了能夠將網站的排名提高,在搜尋引擎的關鍵詞當中能夠獲得比較好的名次。可是往往很多的新手朋友總是會陷入一個死角,就是不管怎麼對關鍵詞進行優化,都沒有辦法獲得排名,之所以出