您好,登錄后才能下訂單哦!
雙核,4個(gè)cores; 16G memory
[root@alish3-cassandra-01 ~]# cat /proc/cpuinfo | grep "cpu cores"
cpu cores : 2
cpu cores : 2
響應(yīng)時(shí)間優(yōu)先的并發(fā)收集器,主要是保證系統(tǒng)的響應(yīng)時(shí)間,減少垃圾收集時(shí)的停頓時(shí)間。適用于應(yīng)用服務(wù)器、電信領(lǐng)域等。
ParNew收集器
ParNew收集器是Serial收集器的多線程版本,許多運(yùn)行在Server模式下的虛擬機(jī)中首選的新生代收集器,除Serial外,只有它能與CMS收集器配合工作。
CMS收集器
CMS, 全稱Concurrent Low Pause Collector,是jdk1.4后期版本開(kāi)始引入的新gc算法,在jdk5和jdk6中得到了進(jìn)一步改進(jìn),它的主要適合場(chǎng)景是對(duì)響應(yīng)時(shí)間的重要性需求 大于對(duì)吞吐量的要求,能夠承受垃圾回收線程和應(yīng)用線程共享處理器資源,并且應(yīng)用中存在比較多的長(zhǎng)生命周期的對(duì)象的應(yīng)用。CMS是用于對(duì)tenured generation的回收,也就是年老代的回收,目標(biāo)是盡量減少應(yīng)用的暫停時(shí)間,減少FullGC發(fā)生的幾率,利用和應(yīng)用程序線程并發(fā)的垃圾回收線程來(lái) 標(biāo)記清除年老代。
CMS并非沒(méi)有暫停,而是用兩次短暫停來(lái)替代串行標(biāo)記整理算法的長(zhǎng)暫停,它的收集周期是這樣:
初始標(biāo)記(CMS-initial-mark) -> 并發(fā)標(biāo)記(CMS-concurrent-mark) -> 重新標(biāo)記(CMS-remark) -> 并發(fā)清除(CMS-concurrent-sweep) ->并發(fā)重設(shè)狀態(tài)等待下次CMS的觸發(fā)(CMS-concurrent-reset)
其中的1,3兩個(gè)步驟需要暫停所有的應(yīng)用程序線程的。第一次暫停從root對(duì)象開(kāi)始標(biāo)記存活的對(duì)象,這個(gè)階段稱為初始標(biāo)記;第二次暫停是在并發(fā)標(biāo)記之后,暫停所有應(yīng)用程序線程,重新標(biāo)記并發(fā)標(biāo)記階段遺漏的對(duì)象(在并發(fā)標(biāo)記階段結(jié)束后對(duì)象狀態(tài)的更新導(dǎo)致)。第一次暫停會(huì)比較短,第二次暫停通常會(huì)比較長(zhǎng),并且remark這個(gè)階段可以并行標(biāo)記。
而并發(fā)標(biāo)記、并發(fā)清除、并發(fā)重設(shè)階段的所謂并發(fā),是指一個(gè)或者多個(gè)垃圾回收線程和應(yīng)用程序線程并發(fā)地運(yùn)行,垃圾回收線程不會(huì)暫停應(yīng)用程序的執(zhí)行,如果你有多于一個(gè)處理器,那么并發(fā)收集線程將與應(yīng)用線程在不同的處理器上運(yùn)行,顯然,這樣的開(kāi)銷(xiāo)就是會(huì)降低應(yīng)用的吞吐量。Remark階段的并行,是指暫停了所有應(yīng)用程序后,啟動(dòng)一定數(shù)目的垃圾回收進(jìn)程進(jìn)行并行標(biāo)記,此時(shí)的應(yīng)用線程是暫停的。
($TOMCAT_HOME/bin/catalina.sh)
export JAVA_OPTS="-server -Xmx10240m -Xms10240m -Xmn3840m -XX:PermSize=256m
-XX:MaxPermSize=256m -Denv=denalicnprod
-XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=1048576
-XX:+DisableExplicitGC
-XX:+UseParNewGC -XX:ParallelGCThreads=10
-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-XX:+CMSScavengeBeforeRemark -XX:ParallelCMSThreads=10
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
-XX:+UseFastAccessorMethods
-XX:LargePageSizeInBytes=128M
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps -Xloggc:gc.log -verbose:gc"
參 數(shù) | 含 義 |
---|---|
-server | 一定要作為第一個(gè)參數(shù),啟用JDK的server版本,在多個(gè)CPU時(shí)性能佳 |
-Xms | java Heap初始大小。 默認(rèn)是物理內(nèi)存的1/64。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。 |
-Xmx | java heap最大值。建議均設(shè)為物理內(nèi)存的80%。不可超過(guò)物理內(nèi)存。 |
-Xmn | 設(shè)置年輕代大小,一般設(shè)置為Xmx的2/8~3/8,等同于-XX:NewSize 和 -XX:MaxNewSize 。 |
-XX:PermSize | 設(shè)定內(nèi)存的永久保存區(qū)初始大小,缺省值為64M |
-XX:MaxPermSize | 設(shè)定內(nèi)存的永久保存區(qū)最大大小,缺省值為64M |
-Denv | 指定tomcat運(yùn)行哪個(gè)project |
-XX:SurvivorRatio | Eden區(qū)與Survivor區(qū)的大小比值, 設(shè)置為8,則兩個(gè)Survivor區(qū)與一個(gè)Eden區(qū)的比值為2:8,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/10 |
-XX:PretenureSizeThreshold | 晉升年老代的對(duì)象大小。默認(rèn)為0,比如設(shè)為1048576(1M),則超過(guò)1M的對(duì)象將不在eden區(qū)分配,而直接進(jìn)入年老代。 |
-XX:+DisableExplicitGC | 關(guān)閉System.gc() |
-XX:+UseParNewGC | 設(shè)置年輕代為并發(fā)收集??膳cCMS收集同時(shí)使用。 |
-XX:ParallelGCThreads | |
-XX:+UseConcMarkSweepGC | 設(shè)置年老代為并發(fā)收集。測(cè)試中配置這個(gè)以后,-XX:NewRatio=4的配置失效了。所以,此時(shí)年輕代大小最好用-Xmn設(shè)置。 |
-XX:+CMSParallelRemarkEnabled | 開(kāi)啟并行remark |
-XX:+CMSScavengeBeforeRemark | 這個(gè)參數(shù)還蠻重要的,它的意思是在執(zhí)行CMS remark之前進(jìn)行一次youngGC,這樣能有效降低remark的時(shí)間 |
-XX:ParallelCMSThreads | CMS默認(rèn)啟動(dòng)的回收線程數(shù)目是 (ParallelGCThreads + 3)/4) ,如果你需要明確設(shè)定,可以通過(guò)-XX:ParallelCMSThreads=20來(lái)設(shè)定,其中ParallelGCThreads是年輕代的并行收集線程數(shù) |
-XX:CMSInitiatingOccupancyFraction | 使用cms作為垃圾回收使用70%后開(kāi)始CMS收集 |
-XX:+UseCMSInitiatingOccupancyOnly | 使用手動(dòng)定義初始化定義開(kāi)始CMS收集 |
-XX:+UseCMSCompactAtFullCollection | 打開(kāi)對(duì)年老代的壓縮??赡軙?huì)影響性能,但是可以消除內(nèi)存碎片。 |
-XX:CMSFullGCsBeforeCompaction | 由于并發(fā)收集器不對(duì)內(nèi)存空間進(jìn)行壓縮、整理,所以運(yùn)行一段時(shí)間以后會(huì)產(chǎn)生“碎片”,使得運(yùn)行效率降低。此參數(shù)設(shè)置運(yùn)行次FullGC以后對(duì)內(nèi)存空間進(jìn)行壓縮、整理。 |
-XX:+CMSPermGenSweepingEnabled | 為了避免Perm區(qū)滿引起的full gc,建議開(kāi)啟CMS回收Perm區(qū)選項(xiàng) |
-XX:+CMSClassUnloadingEnabled | |
-XX:+UseFastAccessorMethods | 原始類型的快速優(yōu)化 |
-XX:LargePageSizeInBytes | 內(nèi)存頁(yè)的大小,不可設(shè)置過(guò)大, 會(huì)影響Perm的大小 |
-XX:SoftRefLRUPolicyMSPerMB | “軟引用”的對(duì)象在最后一次被訪問(wèn)后能存活0毫秒(默認(rèn)為1秒)。 |
-XX:+PrintGCDetails | 記錄 GC 運(yùn)行時(shí)的詳細(xì)數(shù)據(jù)信息,包括新生成對(duì)象的占用內(nèi)存大小以及耗費(fèi)時(shí)間等 |
-XX:+PrintGCTimeStamps | 打印垃圾收集的時(shí)間戳 |
-XX:+PrintHeapAtGC | 打印GC前后的詳細(xì)堆棧信息 |
-XX:+PrintGCApplicationStoppedTime | 打印垃圾回收期間程序暫停的時(shí)間.可與上面混合使用 |
-XX:+PrintGCDateStamps | 之前打印gc日志的時(shí)候使用是:-XX:+PrintGCTimeStamps,這個(gè)選項(xiàng)記錄的是jvm啟動(dòng)時(shí)間為起點(diǎn)的相對(duì)時(shí)間,可讀性較差,不利于定位問(wèn)題,使用PrintGCDateStamps記錄的是系統(tǒng)時(shí)間,更humanreadable |
-Xloggc | 與上面幾個(gè)配合使用,把相關(guān)日志信息記錄到文件以便分析 |
-verbose:gc | 記錄 GC 運(yùn)行以及運(yùn)行時(shí)間,一般用來(lái)查看 GC 是否是應(yīng)用的瓶頸 |
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。