Tomcat性能调优及性能测试工具配置
前言
運行環境:Ubuntu server14 64位
Jdk版本:jdk-1.7.0_79
Tomcat版本:apache-tomcat-7.0.63
Tomcat性能調優
1、內存優化
修改tomcat/bin目錄下catalina.sh文件:
JAVA_OPTS=”$JAVA_OPTS -Dfile.encoding=utf-8 -server -Xmx750M -Xms750M -Xss256k
-XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M
-XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=64M -XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true”
參數說明:
-server:讓tomcat以server模式運行
-Xmx750M:設置Java虛擬機堆的最大可用內存大小,單位:兆(M)。
-Xms750M:設置Java虛擬機堆得初始值內存大小,單位:兆(M)。此值設置與-Xmx相同,可以避免每次垃圾回收后JVM重新分配內存。
-Xss256k:設置每個線程的棧大小。Jdk1.5以后每個線程棧最大為1M,以前的版本最大為256k,根據項目實際情況設置此值的大小。
-XX:+UseBiasedLocking:啟用一個線程鎖,對線程處理自動進行最優調配。
-XX:PermSize=64M:設置非堆內存初始大小。
-XX:MaxPermSize=128M:設置非堆內存最大值。
-XX:MaxTenuringThreshold=31:設置垃圾的最大年齡。若設置為0,則年輕代對象不經過Survivor區,直接進入年老代,對年老代較多的應用,可提高效率。若設置為一個較大的值,則年輕代對象會在Survivor區進行多次復制,這樣可以增加對象在年輕代的存活時間,既對象在年輕代就被回收的概率。
-XX:+UseConcMarkSweepGC:jdk1.5及以后版本具有的功能,使用是GC估算觸發和heap占用觸發,提高垃圾回收的響應時間。
-XX:+UseParNewGC:對年輕代采用多線程并行回收,提高回收效率。
-XX:+CMSParallelRemarkEnabled:在使用-XX:+UseParNewGC的情況下,減少mark的時間。
-XX:+UseCMSCompactAtFullCollection:使用并發收集器時,開啟對年老代的壓縮。
-XX:LargePageSizeInBytes=64M:指定heap內存頁面大小。
-XX:+UseFastAccessorMethods:原始類型快速優化(get、set方法等)
-XX:+UseCMSInitiatingOccupancyOnly:使用手動定義初始化定義開始CMS收集。
-Djava.awt.headless=true:防止圖標在Linux環境下加載不出來的異常。
2、線程優化
修改tomcat/conf目錄下server.xml文件:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="500"
minSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>
參數說明:
port:tomcat服務啟動端口
connectionTimeout:連接等待時長,單位毫秒
URIEncoding:字符編碼
maxThreads:連接器要創建的請求處理線程的最大數量。若未指定,改屬性默認設置為200。如果使用了execute將忽略連接器的此屬性。
minSpareThreads:始終保持運行的最小線程數。若未指定,默認為10.
enableLookups=”false”:禁用DNS查找,提高性能。
disableUploadTimeout:此標志允許servlet容器在數據上傳時使用不同的連接超時,通常較長。如果沒有指定,該屬性被設置為true,禁用上傳超時。
acceptCount:當所有可能的請求處理線程都在使用,傳入連接請求的最大隊列長度。當隊列滿時收到的任何請求都將被拒絕。默認值為100.
compression=”on”:開啟壓縮功能。
compressionMinSize:啟用壓縮的輸出內容大小。默認2kb。
compressableMimeType:壓縮類型。
3、Tomcat運行模式優化
BIO:阻塞式連接。一個線程處理一個請求,適用于連接數目較小且固定的架構,并發數高時,線程數較多,浪費資源。Tomcat7及其以下版本在Linux系統中默認使用這種方式。Jdk1.4版本以下的唯一選擇。
NIO:非阻塞連接。是jdk1.4及后續版本提供的一種新的I/O操作方式(即java.nio包及其子包),擁有比傳統I/O操作(BIO)更好的并發運行性能,利用java異步IO處理,可以通過少量的線程處理大量的請求。Tomcat8之后在Linux中默認這種方式。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="500"
minSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>
APR:是從操作系統級別來解決異步的IO問題,大幅度的提高性能。
3.1、APR配置
Tomcat要支持APR,必須安裝apr和native,這樣tomcat可以利用apache的apr接口,使用操作系統的部分本地操作,從而提高性能。
3.1.1、準備工作
已安裝jdk和tomcat,且jdk要在1.7版本或以上版本
apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz、
apr-iconv-1.2.2.tar.gz、tomcat-native.tar.gz、expat_2.0.1.orig.tar.gz
3.1.2、安裝apr
上傳apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz、apr-iconv-1.2.2.tar.gz、expat_2.0.1.orig.tar.gz
到/usr/local/installPackage/tomcat-apr(目錄自己自定義創建)
解壓縮三個文件包:sudo tar -xzvf apr-1.6.5.tar.gz;sudo tar -xzvf apr-util-1.6.1.tar.gz;sudo tar -xzvf apr-iconv-1.2.2.tar.gz
1、進入apr-1.6.5/目錄執行檢測、編譯、安裝:
sudo ./configure && sudo make && sudo make install
2、進入apr-util-1.6.1/目錄執行檢測、編譯、安裝:
sudo ./configure --with-apr=/usr/local/apr && sudo make && sudo make install
若出現以下錯誤提示:是因為缺少expat庫,需先安裝expat。
解壓縮expat_2.0.1.orig.tar.gz包,并進入expat-2.0.1/目錄執行檢測、編譯、安裝:
sudo ./configure && sudo make && sudo make install
再次進入apr-util-1.6.1/目錄執行檢測、編譯、安裝:
sudo ./configure --with-apr=/usr/local/apr && sudo make && sudo make install
若安裝了expat有可能會導致vi命令無法使用
問題描述:
/usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0: undefined symbol: XML_SetHashSalt
解決方案:
執行命令:export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu
修改配置文件:vi ~/.bashrc
在末尾處添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib/x86_64-linux-gnu
3、進入apr-iconv-1.2.2/目錄執行檢測、編譯、安裝:
sudo ./configure --with-apr=/usr/local/apr && sudo make && sudo make install
3.1.3、安裝tomcat-native
tomcat-native.tar.gz在tomcat/bin目下
解壓縮:sudo tar -xzvf tomcat-native.tar.gz
移動到安裝目錄:tomcat/bin/tomcat-native-1.1.33-src/jni/native
執行檢測、編譯、安裝:
sudo ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/java/jdk && sudo make && sudo make install
注意:/usr/local/java/jdk目錄是jdk的安裝目錄
若編譯安裝失敗,查看openssl版本看服務器是否已安裝:opensslversion
若未安裝則上傳openssl-1.0.2r.tar.gz安裝包,進行安裝:
解壓縮openssl-1.0.2r.tar.gz并進入openssl-1.0.2r目錄執行:
apt-get purge openssl
./config --prefix=/usr/local --openssldir=/usr/local/ssl
make && make install
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make && make install
3.1.4、修改tomcat運行配置
修改tomcat/conf/server.xml文件:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="500"
minSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>
重啟tomcat,并查看tomcat日志,若出現以下錯誤:
修改tomcat/bin/catalina.sh文件:
找到JAVA_OPTS配置,在最后加上:-Djava.library.path=/usr/local/apr/lib
重啟tomcat并查看日志打?。?/p>
出現上述表示tomcat已經是以apr模式運行。
Tomcat性能監控工具VisuaIVM
1、配置
VisualVM是windows jdk自帶的一個軟件,在jdk安裝目錄的bin目錄下。
遠程監控配置,配置JMX管理遠程端的tomcat:
修改遠程端的tomcat/bin/catalina.sh(windows下為catalina.bat)文件:
在JAVA_OPTS后添加:
-Dcom.sun.management.jmxremote(允許使用JMX遠程管理)
-Dcom.sun.management.jmxremote.port=9008(JMX遠程連接端口)
-Dcom.sun.management.jmxremote.authenticate=false(不進行身份認證,任何用戶都可以連接)
-Dcom.sun.management.jmxremote.ssl=false(不使用SSL)
重啟tomcat,打開VisualVM軟件,添加遠程主機ip,在遠程IP上右鍵添加JMX連接。
我使用的是Linux環境,還需修改/etc/hosts文件:
將服務器對應的127.0.0.1的ip改為實際IP地址。
再次使用VisualVM添加JMX遠程連接
然后就可以實時監控tomcat的CUP、內存等數值的變化。
總結
以上是生活随笔為你收集整理的Tomcat性能调优及性能测试工具配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 引起Java序列化失败的常见原因
- 下一篇: redis中setex命令和set命令有