今天來總結一下tomcat的一些優化的方案,由於本人才疏學淺,寫的不好,勿噴!
tomcat對於大多數從事開發工作的童鞋應該不會很陌生,通常做為默認的開發環境來為大家服務,不過tomcat默認的一些配置對於生產環境來說是相當不夠滴,特別對於內存以及線程的配置方面都很有可能成為日后性能的瓶頸。
接下來咱們就聊聊tomcat的優化,從內存以及線程兩個方面來談:
1.內存方面
tomcat的內存優化操作起來就比較簡單了
如果是linux環境的話設置如下:
修改TOMCAT_HOME/bin/catalina.sh,在前面加入
JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"
如果是windows環境的話設置如下:
修改TOMCAT_HOME/bin/catalina.bat,在前面加入
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m
2.線程方面
在server.xml中 有以下配置:
<Connector port="8080" 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就不處理
這里是http connector的優化,如果使用apache和tomcat做集群的負載均衡,並且使用ajp協議做apache和tomcat的協議轉發,那么還需要優化ajp connector。
<Connector port="8009" protocol="AJP/1.3" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"connectionTimeout="20000" redirectPort="8443" />
由於tomcat有多個connector,所以tomcat線程的配置,又支持多個connector共享一個線程池。
首先。打開/conf/server.xml,增加
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />
最大線程500(一般服務器足以),最小空閑線程數20,線程最大空閑時間60秒。
然后,修改<Connector ...>節點,增加executor屬性,executor設置為線程池的名字:
<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" />
可以多個connector公用1個線程池,所以ajp connector也同樣可以設置使用tomcatThreadPool線程池。
轉自
淺談tomcat中間件的優化
https://www.toutiao.com/i6499659893543272974/
