日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

優(yōu)化tomcat——jvm

系統(tǒng) 2604 0



Tomcat 的啟動(dòng)參數(shù)位于tomcat的安裝目錄\bin目錄下,如果你是Linux操作系統(tǒng)就是catalina.sh文件,如果你是Windows操作系統(tǒng)那么你需要改動(dòng)的就是catalina.bat文件。打開該文件,一般該文件頭部是一堆的由##包裹著的注釋文字,找到注釋文字的最后一段如:

1
2
3

?? ?

# $Id: catalina.sh 522797 2007-03-27 07:10:29Z fhanik $
# -----------------------------------------------------------------------------
# OS specific support.? $var _must_ be set to either true or false.

敲入一個(gè)回車,加入如下的參數(shù)
Linux系統(tǒng)中tomcat的啟動(dòng)參數(shù)

1

?? ?

export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC? -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m? -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

Windows系統(tǒng)中tomcat的啟動(dòng)參數(shù)

1

?? ?

set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC? -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m? -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true

上面參數(shù)好多啊,可能有人寫到現(xiàn)在都沒(méi)見一個(gè)tomcat的啟動(dòng)命令里加了這么多參數(shù),當(dāng)然,這些參數(shù)只是我機(jī)器上的,不一定適合你,尤其是參數(shù)后的value(值)是需要根據(jù)你自己的實(shí)際情況來(lái)設(shè)置的。

參數(shù)解釋:
-server
我不管你什么理由,只要你的tomcat是運(yùn)行在生產(chǎn)環(huán)境中的,這個(gè)參數(shù)必須給我加上
因?yàn)閠omcat默認(rèn)是以一種叫java –client的模式來(lái)運(yùn)行的,server即意味著你的tomcat是以真實(shí)的production的模式在運(yùn)行的,這也就意味著你的tomcat以server模式運(yùn)行時(shí)將擁有:更大、更高的并發(fā)處理能力,更快更強(qiáng)捷的JVM垃圾回收機(jī)制,可以獲得更多的負(fù)載與吞吐量.

-Xms–Xmx
即JVM內(nèi)存設(shè)置了,把Xms與Xmx兩個(gè)值設(shè)成一樣是最優(yōu)的做法,有人說(shuō)Xms為最小值,Xmx為最大值不是挺好的,這樣設(shè)置還比較人性化,科學(xué)化。人性?科學(xué)?你個(gè)頭啊。

大家想一下這樣的場(chǎng)景:
一個(gè)系統(tǒng)隨著并發(fā)數(shù)越來(lái)越高,它的內(nèi)存使用情況逐步上升,上升到最高點(diǎn)不能上升了,開始回落,你們不要認(rèn)為這個(gè)回落就是好事情,由其是大起大落,在內(nèi)存回落時(shí)它付出的代價(jià)是CPU高速開始運(yùn)轉(zhuǎn)進(jìn)行垃圾回收,此時(shí)嚴(yán)重的甚至?xí)斐赡愕南到y(tǒng)出現(xiàn)“卡殼”就是你在好好的操作,突然網(wǎng)頁(yè)像死在那邊一樣幾秒甚至十幾秒時(shí)間,因?yàn)镴VM正在進(jìn)行垃圾回收。

因此一開始我們就把這兩個(gè)設(shè)成一樣,使得Tomcat在啟動(dòng)時(shí)就為最大化參數(shù)充分利用系統(tǒng)的效率,這個(gè)道理和jdbcconnection pool里的minpool size與maxpool size的需要設(shè)成一個(gè)數(shù)量是一樣的原理。

–Xmn:年輕代大小(1.4or lator)
設(shè)置年輕代大小為512m。整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。

-Xss
是指設(shè)定每個(gè)線程的堆棧大小。這個(gè)就要依據(jù)你的程序,看一個(gè)線程 大約需要占用多少內(nèi)存,可能會(huì)有多少線程同時(shí)運(yùn)行等。一般不易設(shè)置超過(guò)1M,要不然容易出現(xiàn)out ofmemory。

-XX:+AggressiveOpts
作用如其名(aggressive),啟用這個(gè)參數(shù),則每當(dāng)JDK版本升級(jí)時(shí),你的JVM都會(huì)使用最新加入的優(yōu)化技術(shù)(如果有的話)

-XX:+UseBiasedLocking
啟用一個(gè)優(yōu)化了的線程鎖,我們知道在我們的appserver,每個(gè)http請(qǐng)求就是一個(gè)線程,有的請(qǐng)求短有的請(qǐng)求長(zhǎng),就會(huì)有請(qǐng)求排隊(duì)的現(xiàn)象,甚至還會(huì)出現(xiàn)線程阻塞,這個(gè)優(yōu)化了的線程鎖使得你的appserver內(nèi)對(duì)線程處理自動(dòng)進(jìn)行最優(yōu)調(diào)配。

-XX:PermSize=128M-XX:MaxPermSize=256M
JVM使用-XX:PermSize設(shè)置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;
在數(shù)據(jù)量的很大的文件導(dǎo)出時(shí),一定要把這兩個(gè)值設(shè)置上,否則會(huì)出現(xiàn)內(nèi)存溢出的錯(cuò)誤。
由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4。
那么,如果是物理內(nèi)存4GB,那么64分之一就是64MB,這就是PermSize默認(rèn)值,也就是永生代內(nèi)存初始大?。?
四分之一是1024MB,這就是MaxPermSize默認(rèn)大小。

-XX:+DisableExplicitGC
在程序代碼中不允許有顯示的調(diào)用”System.gc()”??吹竭^(guò)有兩個(gè)極品工程中每次在DAO操作結(jié)束時(shí)手動(dòng)調(diào)用System.gc()一下,覺(jué)得這樣做好像能夠解決它們的out ofmemory問(wèn)題一樣,付出的代價(jià)就是系統(tǒng)響應(yīng)時(shí)間嚴(yán)重降低,就和我在關(guān)于Xms,Xmx里的解釋的原理一樣,這樣去調(diào)用GC導(dǎo)致系統(tǒng)的JVM大起大落,性能不到什么地方去喲!

-XX:+UseParNewGC
對(duì)年輕代采用多線程并行回收,這樣收得快。

-XX:+UseConcMarkSweepGC
即CMS gc,這一特性只有jdk1.5即后續(xù)版本才具有的功能,它使用的是gc估算觸發(fā)和heap占用觸發(fā)。
我們知道頻頻繁的GC會(huì)造面JVM的大起大落從而影響到系統(tǒng)的效率,因此使用了CMS GC后可以在GC次數(shù)增多的情況下,每次GC的響應(yīng)時(shí)間卻很短,比如說(shuō)使用了CMS GC后經(jīng)過(guò)jprofiler的觀察,GC被觸發(fā)次數(shù)非常多,而每次GC耗時(shí)僅為幾毫秒。

-XX:MaxTenuringThreshold
設(shè)置垃圾最大年齡。如果設(shè)置為0的話,則年輕代對(duì)象不經(jīng)過(guò)Survivor區(qū),直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個(gè)較大值,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概率。
這個(gè)值的設(shè)置是根據(jù)本地的jprofiler監(jiān)控后得到的一個(gè)理想的值,不能一概而論原搬照抄。

-XX:+CMSParallelRemarkEnabled
在使用UseParNewGC 的情況下, 盡量減少 mark 的時(shí)間

-XX:+UseCMSCompactAtFullCollection
在使用concurrent gc 的情況下, 防止 memoryfragmention, 對(duì)live object 進(jìn)行整理, 使 memory 碎片減少。

-XX:LargePageSizeInBytes
指定 Java heap的分頁(yè)頁(yè)面大小

-XX:+UseFastAccessorMethods
get,set 方法轉(zhuǎn)成本地代碼

-XX:+UseCMSInitiatingOccupancyOnly
指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 啟動(dòng)收集

-XX:CMSInitiatingOccupancyFraction=70

CMSInitiatingOccupancyFraction,這個(gè)參數(shù)設(shè)置有很大技巧,基本上滿足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就不會(huì)出現(xiàn)promotion failed。在我的應(yīng)用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90說(shuō)明年老代到90%滿的時(shí)候開始執(zhí)行對(duì)年老代的并發(fā)垃圾回收(CMS),這時(shí)還 剩10%的空間是5488*10%=548兆,所以即使Xmn(也就是年輕代共512兆)里所有對(duì)象都搬到年老代里,548兆的空間也足夠了,所以只要滿 足上面的公式,就不會(huì)出現(xiàn)垃圾回收時(shí)的promotion failed;
因此這個(gè)參數(shù)的設(shè)置必須與Xmn關(guān)聯(lián)在一起。

-Djava.awt.headless=true
這個(gè)參數(shù)一般我們都是放在最后使用的,這全參數(shù)的作用是這樣的,有時(shí)我們會(huì)在我們的J2EE工程中使用一些圖表工具如:jfreechart,用于在web網(wǎng)頁(yè)輸出GIF/JPG等流,在winodws環(huán)境下,一般我們的app server在輸出圖形時(shí)不會(huì)碰到什么問(wèn)題,但是在linux/unix環(huán)境下經(jīng)常會(huì)碰到一個(gè)exception導(dǎo)致你在winodws開發(fā)環(huán)境下圖片顯示的好好可是在linux/unix下卻顯示不出來(lái),因此加上這個(gè)參數(shù)以免避這樣的情況出現(xiàn)。

上述這樣的配置,基本上可以達(dá)到:
1. 系統(tǒng)響應(yīng)時(shí)間增快
2. JVM回收速度增快同時(shí)又不影響系統(tǒng)的響應(yīng)率
3. JVM內(nèi)存最大化利用
4. 線程阻塞情況最小化

?

優(yōu)化tomcat——jvm


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 通辽市| 大庆市| 桂平市| 江山市| 长海县| 山丹县| 大新县| 合阳县| 平罗县| 卓尼县| 尤溪县| 漳平市| 新巴尔虎左旗| 扶沟县| 镇原县| 上虞市| 柯坪县| 信丰县| 临漳县| 工布江达县| 高尔夫| 龙口市| 昌江| 东乡| 华蓥市| 富民县| 林州市| 鲁山县| 河南省| 思茅市| 通山县| 潜山县| 大石桥市| 黄梅县| 金乡县| 阆中市| 普格县| 石嘴山市| 潢川县| 涞源县| 烟台市|