tomcat 性能優化

Tomcat 性能優化

硬件資源優化

比如內存,硬盤

架構上的優化

利用緩存和壓縮 在nginx前端
做動靜分離 緩解tomcat壓力
搭建集羣 採用nginx請求分流

JVM參數調優

優化文件: /usr/local/tomcat/bin/catalina.sh

CATALINA_OPTS="
server 
Xms6000M 
Xmx6000M 
Xss512k 
XX:NewSize=2250M 
XX:MaxNewSize=2250M 
XX:PermSize=128M
XX:MaxPermSize=256M 
XX:+AggressiveOpts 
XX:+UseBiasedLocking 
XX:+DisableExplicitGC 
XX:+UseParNewGC 
XX:+UseConcMarkSweepGC 
XX:MaxTenuringThreshold=31 
XX:+CMSParallelRemarkEnabled 
XX:+UseCMSCompactAtFullCollection 
XX:LargePageSizeInBytes=128m 
XX:+UseFastAccessorMethods 
XX:+UseCMSInitiatingOccupancyOnly
Duser.timezone=Asia/Shanghai 
Djava.awt.headless=true"

參數的詳細配置,參考:http://blog.51cto.com/zhongliang/2101918

Tomcat 參數優化

這裏着重講解tomcat參數的優化:server.xml文件,
關閉DNS查詢、配置最大併發等參數。
maxThreads:tomcat起動的最大線程數,即同時處理的任務個數,默認值爲200
acceptCount:當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值爲100
當然這些值都不是越大越好,需要根據實際情況來設定。可以基於測試的基礎上來不斷的調優分析。

<Connector port="8080"   
protocol="org.apache.coyote.http11.Http11NioProtocol"  
connectionTimeout="20000"     連接超時
redirectPort="8443"           
maxThreads="500"        最大線程   就是最大併發數
minSpareThreads="20"        最小空閒線程數
acceptCount="100"        隊列大小  等待處理的
disableUploadTimeout="true"     類似於Apache中的keeyalive一樣
enableLookups="false"   關閉DNS查詢
URIEncoding="UTF-8" /> 
maxSpareThreads :     最大空閒線程數      
acceptCount是當線程數達到maxThreads後,後續請求會被放入一個等待隊列,這個acceptCount是這個隊列的大小,如果這個隊列也滿了,就直接refuse connection
壓縮compression=”on” compressionMinSize=”2048″        compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

外部調優

禁用DNS查詢
調整線程數(線程池)
maxThreads="600"   最大線程數
minSpareThreads="100"   初始化時創建的線程數
maxSpareThreads="500"  一旦創建的線程越過這個值,Tomcat就會關閉不再需要的socket線程
acceptCount="700"  指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理              

java工具 監控和管理控制檯

在windows端安裝jdk包,找到以下命令
在c:\ Program Files\jdk\bin\jconsole.exe   監控和管理控制檯
通過IP:端口連接到監控和JAVA控制檯
在c:\ Program Files\jdk\bin\jvisualvm.exe 
通過IP:端口連接   管理工具

在tomcat服務器上修改配置文件 
catalina.sh中加入配置,放置在#!/bin/bash標籤下
vim /usr/local/tomcat8/bin/catalina.sh

!/bin/bash
CATALINA_OPTS="$CATALINA_OPTS
Djava.rmi.server.hostname=10.204.3.7 
Dcom.sun.management.jmxremote
Dcom.sun.management.jmxremote.port=12345
Dcom.sun.management.jmxremote.authenticate=true
Dcom.sun.management.jmxremote.ssl=false
Dcom.sun.management.jmxremote.pwd.file=/usr/local/jdk1.7/jre/lib/management/jmxremote.password"

配置權限文件

cd /usr/local/jdk1.7/jre/lib/management/
cp jmxremote.password.template jmxremote.password
vi jmxremote.password
zhongliang 123456           # 用戶名zhongliang  密碼249765270
chmod 600 jmxremote.password

重啓tomcat服務,開啓監聽端口12345

連接jconsole和jvisualvm

輸入遠程主機:端口 10.204.3.7:12345

選擇文件—》添加JMX..連接—》10.204.3.7:12345

CPU使用情況 堆,垃級回收 抽樣器
實時線程數

注意:在控制檯上執行GC清理的時候,會出現前端斷連

Zabbix監控tomcat

zabbix編譯的時候,指定--enable-java 
yum安裝的時候,yum install zabbix-java

vim zabbix_server.conf
JavaGateway=192.168.3.14
JavaGatewayPort=10052
StartJavaPollers=5

第三方工具,cmdline-jmxclient
    http://crawler.archive.org/cmdline-jmxclient/

Apache整合tomcat

安裝httpd
安裝tomcat
編譯生成mod_jk。
下載tomcat-connectors-1.2.42-src.tar.gz包
Wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz

tar xzvf tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42/native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/

配置。
在/usr/local/apache/conf/下面建立兩個配置文件mod_jk.conf和workers.properties。

vi mod_jk.conf#######################
添加以下內容:
指出mod_jk模塊工作所需要的工作文件workers.properties的位置
JkWorkersFile /usr/local/apache/conf/workers.properties

Where to put jk logs
JkLogFile /usr/local/apache/logs/mod_jk.log

Set the jk log level [debug/error/info]
JkLogLevel info

Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

將所有servlet 和jsp請求通過ajp13的協議送給Tomcat,讓Tomcat來處理
JkMount /servlet/* worker1
JkMount /*.jsp worker1

.

vi workers.properties###########################
添加以下內容:
Defining a worker named worker1 and of type ajp13
worker.list=worker1

Set properties for worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

.

整合apache和tomcat

Vim httpd.conf#############
DirectoryIndex index.jsp index.html
添加index.jsp
LoadModule jk_module modules/mod_jk.so
加載mod_jk.so模塊
Include /usr/local/apache/conf/mod_jk.conf
引入配置文件

將tomcat和apache的發佈目錄設置成一致。建立站點文件index.jsp

Nginx整合Tomcat 集羣

T_INSTALL_DIR=/usr/local/tomcat
Port=`export 8005+1`
複製多個tomcat到tomcat1 tomcat2 tomcat3

修改對應每個發佈目錄的端口

安裝nginx
tar zxvf nginx-1.7.8.tar.gz  //解壓
cd nginx-1.7.8
./configure --with-http_stub_status_module --with-http_ssl_module//啓動server狀態頁和https模塊
make && make install

修改nginx.conf配置文件,添加一個location
location ~  \.(jsp|do)$  {  
            index   index.jsp;
                proxy_pass http://192.168.74.129:8081;  //來自jsp或者do的後綴的請求交給tomcat處理</span>
proxy_redirect off;  
proxy_set_header Host $host;    //後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP  
proxy_set_header X-Real-IP $remote_addr;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
client_max_body_size 10m;   //允許客戶端請求的最大單文件字節數  
client_body_buffer_size 128k; //緩衝區代理緩衝用戶端請求的最大字節數  
proxy_connect_timeout 90;   //nginx跟後端服務器連接超時時間  
proxy_read_timeout 90;     //連接成功後,後端服務器響應時間  
proxy_buffer_size 4k;      //設置代理服務器(nginx)保存用戶頭信息的緩衝區大小  
proxy_buffers  6  32k;       //proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置  
proxy_busy_buffers_size 64k;//高負荷下緩衝大小(proxy_buffers*2)  
proxy_temp_file_write_size 64k; //設定緩存文件夾大小,大於這個值,將從upstream服務器傳  
}  

Tomcat故障

日誌文件
/usr/local/tomcat/logs/catalina.out

【注】:tomcat查端口時正常,服務正常,但訪問後,服務消失,
問題原因:因爲配置文件不正確,導致報錯,服務自動停止
解決方法:檢查配置文件
例如:配置文件中沒有定義發佈目錄,但是發佈目錄中的ROOT已被刪除,會導致此類問題發生

15.1 cannot execute binary file

/usr/local/tomcat8/bin/catalina.sh: line 433: /usr/local/jdk1.8/bin/java: cannot execute binary file

[root@tomcat01 local]# java --version
bash: /usr/local/jdk1.8/bin/java: cannot execute binary file

原因:軟件版本與系統版本不一致

15.2 insufficient free space available after evicting expired cache entries-consider increasing the maximum size of the cache.

tomcat部署jenkins啓動報錯:

insufficient free space available after evicting expired cache entries-consider increasing the maximum size of the cache.

解決該問題方法,修改tomcat/conf/context.xml文件,增加資源最大可緩存的大小:
<Resources
cachingAllowed="true"
cacheMaxSize="102400"
/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章