vim $CATALINA_HOME/conf/server.xml
...
<Connector port="8080" protocol="HTTP/1.1"
????????? URIEncoding="UTF-8"? minSpareThreads="25" maxSpareThreads="75"
????????? enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
????????? acceptCount="500"? maxThreads="300"
????????? useURIValidationHack="false"
? ? ? ? ? compression="on" compressionMinSize="2048"
? ? ? ? ? compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
? ? ? ? ? redirectPort="8443"
/>
...
【注釋】
URIEncoding:URI編碼,這里參數是UTF-8,很容易理解,即支持中文域名
minSpareThreads:最小空閑線程,即tomcat可以保留的最小線程
? ? |-->????maxSpareThreads:最大空閑進程,如果超出這個參數,則會被回收
(這兩個參數根據實際環境而定,如果每天都有一個并發爆發期,則最好min設置的大一些)
enableLookups:是否開啟域名解析,這個一般都禁止,域名解析影響性能
disableUploadTimeout:
connectionTimeout:連接超時時間,單位是ms,根據程序性能決定
maxThreads:同一時刻可以接收的最大請求,即并發量
acceptCount:若超出maxThreads,則超出部分不能超過此參數值,若超過,則拒絕
useURIValidationHack:設置為false可以減少tomcat對一些url的不必要的檢查從而減省開銷【不明覺厲】
compression:是否啟用壓縮,肯定啟用了
compressionMinSize:壓縮文件大小下限,單位字節
compressableMimeType:壓縮文件的Mime類型
redirectPort:重定向(因此若為443https,則8443 connector也應該加入以上參數)
jvm調優
vim $CATALINA_HOME/bin/catalina.sh
...
export JAVA_OPTS="-server -Xms8192M -Xmx8192M -Xmn3072M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=4096M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC ?-XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m ?-XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"
...
【注釋信息】
jvm調優其實就是在catalina啟動時臨時加上JAVA_OPTS變量值的。
-server:意思就是將tomcat改為生產模式,這個看網上說明,不加的話,就如同實驗環境一樣。因此,必加參數
-Xms:jvm最小堆內存
? ?|--> ????-Xmx:jvm最大堆內存
這兩個值的差值叫做保留內存,不過建議最好設置的一樣,即最小內存隨同最大內存,之所以這么設置是因為,內存回收的時候,也是需要消耗cpu的,如果此時突然并發又來了,而tomcat卻在回收內存,那么就不爽了
-Xmn:新生態內存,這個官方建議是jvm堆內存的3/8,堆內存=新生內存+老年內存+持久內存
-Xss:設定每個線程的堆棧大小
-XX:+AggressiveOpts:作用如其名(aggressive),啟用這個參數,則每當JDK版本升級時,你的JVM都會使用最新加入的優化技術
-XX:+UseBiasedLocking:啟用一個優化了的線程鎖,我們知道在我們的appserver,每個http請求就是一個線程,有的請求短有的請求長,就會有請求排隊的現象,甚至還會出現線程阻塞,這個優化了的線程鎖使得你的appserver內對線程處理自動進行最優調配。
-XX:PermSize:持久態最小內存,默認為物理內存大小的1/64
-XX:MaxPermSize:持久態最大內存,默認為物理內存大小的1/4
-XX:+DisableExplicitGC:在程序代碼中不允許有顯示的調用”System.gc()”,【不明覺厲】
-XX:MaxTenuringThreshold:設置對象在年輕態停留的時間,時間越長,被回收概率越大,若為0,則直接轉到老年態
-XX:+UseConcMarkSweepGC:CMS gc,這一特性只有jdk1.5即后續版本才具有的功能,它使用的是gc估算觸發和heap占用觸發。
我們知道頻頻繁的GC會造面JVM的大起大落從而影響到系統的效率,因此使用了CMS GC后可以在GC次數增多的情況下,每次GC的響應時間卻很短,比如說使用了CMS GC后經過jprofiler的觀察,GC被觸發次數非常多,而每次GC耗時僅為幾毫秒。【不明覺厲】
-XX:+UseParNewGC:年輕代采用多線程并行回收,加速回收 ?
? ? |-->? ?-XX:+CMSParallelRemarkEnabled:在使用UseParNewGC 的情況下, 盡量減少 mark 的時間【不明覺厲】
-XX:+UseCMSCompactAtFullCollection:在使用concurrent gc 的情況下, 防止 memoryfragmention, 對live object 進行整理, 使 memory 碎片減少【不知道啥意思】
-XX:LargePageSizeInBytes:指定 Java heap的分頁頁面大小
-XX:+UseFastAccessorMethods:get,set 方法轉成本地代碼【不知道啥意思】
-XX:+UseCMSInitiatingOccupancyOnly:指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 啟動收集【不知道啥意思】
-Djava.awt.headless=true":這個參數一般我們都是放在最后使用的,這全參數的作用是這樣的,有時我們會在我們的J2EE工程中使用一些圖表工具如:jfreechart,用于在 web網頁輸出GIF/JPG等流,在winodws環境下,一般我們的app server在輸出圖形時不會碰到什么問題,但是在linux/unix環境下經常會碰到一個exception導致你在winodws開發環境下圖片顯 示的好好可是在linux/unix下卻顯示不出來,因此加上這個參數以免避這樣的情況出現。【雖然知道結果,就是不知道因在何處】
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
