JVM虛擬機調參

JVM虛擬機調參

一、堆大小設置
JVM 中最大堆大小有三方面限制:相關操作系統的數據模型(32-bt還是64-bit)限制;系統的可用虛擬內存限制;系統的可用物理內存限制。32位系統下,一般限制在1.5G~2G;64為操作系統對內存無限制。我在Windows Server 2003 系統,3.5G物理內存,JDK5.0下測試,最大可設置為1478m。
典型設置:
java?-Xmx3550m -Xms3550m -Xmn2g?-Xss128k
-Xmx3550m:設置JVM最大可用內存為3550M。
-Xms3550m:設置JVM促使內存為3550m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存。
-Xmn2g:設置年輕代大小為2G。整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。
-Xss128k:設置每個線程的堆棧大小。JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。
java -Xmx3550m -Xms3550m -Xss128k?-XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4:設置年輕代(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)。設置為4,則年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5
-XX:SurvivorRatio=4:設置年輕代中Eden區與Survivor區的大小比值。設置為4,則兩個Survivor區與一個Eden區的比值為2:4,一個Survivor區占整個年輕代的1/6
-XX:MaxPermSize=16m:設置持久代大小為16m。
-XX:MaxTenuringThreshold=0:設置垃圾最大年齡。如果設置為0的話,則年輕代對象不經過Survivor區,直接進入年老代。對于年老代比較多的應用,可以提高效率。如果將此值設置為一個較大值,則年輕代對象會在Survivor區進行多次復制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概論。
二、回收器選擇
JVM給了三種選擇:串行收集器、并行收集器、并發收集器,但是串行收集器只適用于小數據量的情況,所以這里的選擇主要針對并行收集器和并發收集器。默認情況下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在啟動時加入相應參數。JDK5.0以后,JVM會根據當前系統配置進行判斷。
吞吐量優先的并行收集器
如上文所述,并行收集器主要以到達一定的吞吐量為目標,適用于科學技術和后臺處理等。
典型配置:
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k?-XX:+UseParallelGC -XX:ParallelGCThreads=20
-XX:+UseParallelGC:選擇垃圾收集器為并行收集器。此配置僅對年輕代有效。即上述配置下,年輕代使用并發收集,而年老代仍舊使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的線程數,即:同時多少個線程一起進行垃圾回收。此值最好配置與處理器數目相等。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20?-XX:+UseParallelOldGC
-XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集。JDK6.0支持對年老代并行收集。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC??-XX:MaxGCPauseMillis=100
-XX:MaxGCPauseMillis=100:設置每次年輕代垃圾回收的最長時間,如果無法滿足此時間,JVM會自動調整年輕代大小,以滿足此值。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC? -XX:MaxGCPauseMillis=100?-XX:+UseAdaptiveSizePolicy
-XX:+UseAdaptiveSizePolicy:設置此選項后,并行收集器會自動選擇年輕代區大小和相應的Survivor區比例,以達到目標系統規定的最低相應時間或者收集頻率等,此值建議使用并行收集器時,一直打開。
響應時間優先的并發收集器
如上文所述,并發收集器主要是保證系統的響應時間,減少垃圾收集時的停頓時間。適用于應用服務器、電信領域等。
典型配置:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20?-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC:設置年老代為并發收集。測試中配置這個以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此時年輕代大小最好用-Xmn設置。
-XX:+UseParNewGC:設置年輕代為并行收集。可與CMS收集同時使用。JDK5.0以上,JVM會根據系統配置自行設置,所以無需再設置此值。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC?-XX:CMSFullGCsBeforeCompaction=5?-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction:由于并發收集器不對內存空間進行壓縮、整理,所以運行一段時間以后會產生“碎片”,使得運行效率降低。此值設置運行多少次GC以后對內存空間進行壓縮、整理。
-XX:+UseCMSCompactAtFullCollection:打開對年老代的壓縮。可能會影響性能,但是可以消除碎片
三、輔助信息
JVM提供了大量命令行參數,打印信息,供調試使用。主要有以下一些:
-XX:+PrintGC
輸出形式:[GC 118250K->113543K(130112K), 0.0094143 secs]
??????????????? [Full GC 121376K->10414K(130112K), 0.0650971 secs]

-XX:+PrintGCDetails
輸出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
??????????????? [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

-XX:+PrintGCTimeStamps?-XX:+PrintGC:PrintGCTimeStamps可與上面兩個混合使用
輸出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中斷的執行時間。可與上面混合使用
輸出形式:Application time: 0.5291524 seconds
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期間程序暫停的時間。可與上面混合使用
輸出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:PrintHeapAtGC:打印GC前后的詳細堆棧信息
輸出形式:
34.702: [GC {Heap before gc invocations=7:
?def new generation?? total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000)
eden space 49152K,? 99% used?[0x1ebd0000, 0x21bce430, 0x21bd0000)
from space 6144K,? 55% used?[0x221d0000, 0x22527e10, 0x227d0000)
? to?? space 6144K,?? 0% used [0x21bd0000, 0x21bd0000, 0x221d0000)
?tenured generation?? total 69632K, used 2696K [0x227d0000, 0x26bd0000, 0x26bd0000)
the space 69632K,?? 3% used?[0x227d0000, 0x22a720f8, 0x22a72200, 0x26bd0000)
?compacting perm gen? total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)
?? the space 8192K,? 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)
??? ro space 8192K,? 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)
??? rw space 12288K,? 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)
34.735: [DefNew: 52568K->3433K(55296K), 0.0072126 secs] 55264K->6615K(124928K)Heap after gc invocations=8:
?def new generation?? total 55296K, used 3433K [0x1ebd0000, 0x227d0000, 0x227d0000)
eden space 49152K,?? 0% used?[0x1ebd0000, 0x1ebd0000, 0x21bd0000)
? from space 6144K,? 55% used [0x21bd0000, 0x21f2a5e8, 0x221d0000)
? to?? space 6144K,?? 0% used [0x221d0000, 0x221d0000, 0x227d0000)
?tenured generation?? total 69632K, used 3182K [0x227d0000, 0x26bd0000, 0x26bd0000)
the space 69632K,?? 4% used?[0x227d0000, 0x22aeb958, 0x22aeba00, 0x26bd0000)
?compacting perm gen? total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)
?? the space 8192K,? 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)
??? ro space 8192K,? 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)
??? rw space 12288K,? 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)
}
, 0.0757599 secs]
-Xloggc:filename:與上面幾個配合使用,把相關日志信息記錄到文件以便分析。
四、常見配置匯總
堆設置
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:設置年輕代大小
-XX:NewRatio=n:設置年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3,年輕代占整個年輕代年老代和的1/4
-XX:SurvivorRatio=n:年輕代中Eden區與兩個Survivor區的比值。注意Survivor區有兩個。如:3,表示Eden:Survivor=3:2,一個Survivor區占整個年輕代的1/5
-XX:MaxPermSize=n:設置持久代大小
收集器設置
-XX:+UseSerialGC:設置串行收集器
-XX:+UseParallelGC:設置并行收集器
-XX:+UseParalledlOldGC:設置并行年老代收集器
-XX:+UseConcMarkSweepGC:設置并發收集器
垃圾回收統計信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
并行收集器設置
-XX:ParallelGCThreads=n:設置并行收集器收集時使用的CPU數。并行收集線程數。
-XX:MaxGCPauseMillis=n:設置并行收集最大暫停時間
-XX:GCTimeRatio=n:設置垃圾回收時間占程序運行時間的百分比。公式為1/(1+n)
并發收集器設置
-XX:+CMSIncrementalMode:設置為增量模式。適用于單CPU情況。
-XX:ParallelGCThreads=n:設置并發收集器年輕代收集方式為并行收集時,使用的CPU數。并行收集線程數。

五、調優總結

年輕代大小選擇
響應時間優先的應用:盡可能設大,直到接近系統的最低響應時間限制(根據實際情況選擇)。在此種情況下,年輕代收集發生的頻率也是最小的。同時,減少到達年老代的對象。
吞吐量優先的應用:盡可能的設置大,可能到達Gbit的程度。因為對響應時間沒有要求,垃圾收集可以并行進行,一般適合8CPU以上的應用。
年老代大小選擇
響應時間優先的應用:年老代使用并發收集器,所以其大小需要小心設置,一般要考慮并發會話率和會話持續時間等一些參數。如果堆設置小了,可以會造成內存碎片、高回收頻率以及應用暫停而使用傳統的標記清除方式;如果堆大了,則需要較長的收集時間。最優化的方案,一般需要參考以下數據獲得:
并發垃圾收集信息
持久代并發收集次數
傳統GC信息
花在年輕代和年老代回收上的時間比例
減少年輕代和年老代花費的時間,一般會提高應用的效率
吞吐量優先的應用:一般吞吐量優先的應用都有一個很大的年輕代和一個較小的年老代。原因是,這樣可以盡可能回收掉大部分短期對象,減少中期的對象,而年老代盡存放長期存活對象。
較小堆引起的碎片問題
因為年老代的并發收集器使用標記、清除算法,所以不會對堆進行壓縮。當收集器回收時,他會把相鄰的空間進行合并,這樣可以分配給較大的對象。但是,當堆空間較小時,運行一段時間以后,就會出現“碎片”,如果并發收集器找不到足夠的空間,那么并發收集器將會停止,然后使用傳統的標記、清除方式進行回收。如果出現“碎片”,可能需要進行如下配置:
-XX:+UseCMSCompactAtFullCollection:使用并發收集器時,開啟對年老代的壓縮。
-XX:CMSFullGCsBeforeCompaction=0:上面配置開啟的情況下,這里設置多少次Full GC后,對年老代進行壓縮

---------------------

posted on 2018-11-04 13:37 臥似長劍 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/chencanjian/p/9903711.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279020.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279020.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279020.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Locktopus鎖定iOS設備上的單個應用程序

If you want to share a cool game on your iOS device but not let everyone read your email, Locktopus offers a simple app-by-app lockdown solution. 如果您想在iOS設備上共享一個很棒的游戲,但又不想讓所有人都閱讀您的電子郵件,那么Locktopus提…

php speedtest,大神教你如何搭建自己的web speedtest站點

導讀speedtest作為一款在線并且可視化的網速測試工具。使用方法簡單,無需下載、安裝多余軟件,只需有瀏覽器即可。那如何搭建一個自己的web speedtest站點呢?項目開源地址:https://github.com/adolfintel/speedtest安裝web,php,git…

MySQL服務器硬件和操作系統調節

1. 擁有足夠的物理內存來把整個InnoDB文件加載到內存中——在內存中訪問文件時的速度要比在硬盤中訪問時快的多。 2. 不惜一切代價避免使用Swap交換分區 – 交換時是從硬盤讀取的,它的速度很慢。 3. 使用電池供電的RAM(注:RAM即隨機存儲器&am…

數據結構小結+模板

\[OI中的數據結構\] \[By\;TYQ\] 線性結構 大部略 單調棧 棧 , 但是push的時候要彈出所有比他小/大的(多用于優化Dp) 單調隊列 隊列 , 同單調棧 樹狀結構 樹狀數組 核心:lowbit(x) (x) & (-x) ...其實lowbit(x) 2^x的最低非0位 PION8012初賽中考了...但只涉及正數... 為什…

視頻翻錄_將DVD解密并復制到硬盤驅動器而無需翻錄

視頻翻錄Have you ever wanted to make backup copies of your DVDs but didn’t want to mess with confusing DVD ripping software? Today, we’ll look at drop dead simple method to decrypt DVDs on the fly with DVD43 so you can easily copy them to your hard dri…

詳解面向對象、構造函數、原型與原型鏈

詳解面向對象、構造函數、原型與原型鏈 為了幫助大家能夠更加直觀的學習和了解面向對象,我會用盡量簡單易懂的描述來展示面向對象的相關知識。并且也準備了一些實用的例子幫助大家更加快速的掌握面向對象的真諦。 jQuery的面向對象實現封裝拖拽簡易版運動框架封裝這…

如何將Wii遙控器用作陀螺儀鼠標

If you have a spare Nintendo Wii remote with the Motion Plus add-on, you can use it to control your Windows PC from across the room. Here’s how to get it working in a couple of easy steps. 如果您有帶Motion Plus附加組件的備用Nintendo Wii遙控器,則…

68.iOS設備尺寸及型號代碼(iPhoneXR/XS)

所有設備型號官網地址: https://www.theiphonewiki.com/wiki/Models iPhone: 機型像素比例像素密度屏幕尺寸機型代碼發布日期iPhone 2g4803203:2163ppi3.5iPhone1,12008.01iPhone 3g4803203:2163ppi3.5iPhone1,22008.06iPhone 3gs4803203:2163ppi3.5iPhone2,12009.0…

php 自帶 web server 如何重寫 rewrite .htaccess

為什么80%的碼農都做不了架構師&#xff1f;>>> <?php // filename: route.php if (preg_match(/\.(?:png|jpg|jpeg|gif|css|js)$/, $_SERVER["REQUEST_URI"])) {return false; } else {include __DIR__ . /index.php; } 更好的寫法&#xff1a; &l…

oracle11g導入錯誤,oracle 11g導入到10g引起的錯誤

環境介紹老環境新環境操作系統&#xff1a;redhat5.8 64位redhat6.4 64位數據庫版本&#xff1a;oracle 10.2.0.4 64位oracle 11.2.0.4 64位背景&#xff1a;之前有一套老的數據庫rac是基于oracle10g搭建&#xff0c;跑了幾年了。現在前端應用程序準備升級&#xff0c;考慮到前…

sci-hub谷歌插件_Google Home Hub具有隱藏屏幕設置菜單

sci-hub谷歌插件You can adjust the brightness or set an alarm on your Google Home Hub with a voice command. But if you’re trying to be quiet or there’s a lot of background noise, you can also do these things using a hidden Screen Settings menu. 您可以使用…

二叉樹的前序、中序、后序遍歷與創建

#include <iostream> #include <string> #include <stack> using namespace std; struct node; typedef node *pNode; struct node { char data; pNode left, right; }; string line; string::iterator it; // 前序擴展序列建立二叉樹 void plan…

flex-2

1、 2、 justify&#xff1a;整理版面 3、 4、歸納 justify-content&#xff1a;flex-start&#xff08;默認&#xff09;、center、flex-end 下面還會提到剩下的兩種項目在主軸上對齊方式&#xff1a; space-between:兩端對齊&#xff08;項目間距離相等&#xff09; space-ar…

TextInput

TextInput /** TextInput 是一個允許用戶在應用中通過鍵盤輸入文本的基本組件* 本組件的屬性提供了多種特性的配置,如自動完成,自動大小寫,占位文字,鍵盤類型等* 常用:* placeholder 占位符* value 輸入框的值* password 是否密文輸入* editable 是否可編輯* retureKeyType …

如何使用oracle查詢,oracle 表查詢

Oracle 的 oracle 表查詢通過scott用戶下的表來演示如何使用select語句&#xff0c;接下來對emp、dept、salgrade表結構進行解說。emp 雇員表字段名稱 數據類型 是否為空 備注-------- ----------- -------- --------EMPNO NUMBER(4) 員工編…

火狐標簽在中間_在Firefox中保留未使用的標簽

火狐標簽在中間If you have a lot of content heavy webpages open in Firefox, it soon adds up on memory usage. The BarTab extension puts unused tabs on hold and keeps them unloaded until you are ready to access them. 如果您在Firefox中打開了大量內容繁重的網頁&…

[CQOI2012]模擬工廠 題解(搜索+貪心)

[CQOI2012]模擬工廠 題解(搜索貪心) 標簽&#xff1a;題解 閱讀體驗&#xff1a;https://zybuluo.com/Junlier/note/1327574 鏈接題目地址&#xff1a;洛谷P3161 BZOJ P2667 這個題練一練綜合思想還是不錯的。。。&#xff08;然而蒟蒻不會啊&#xff09; 做法 肯定是在能完成某…

上傳文件的input問題以及FormData特性

1.input中除了type"file"還要加上name"file"&#xff0c;否則$_FILES為空&#xff0c;input的name值就是為了區分每一個input的 2.var formdata new FormData($("#form")[0]); 或者var formdata new FormData(document.getElementById("f…

iphone手機備忘錄遷移_如何在iPhone和iPad上使用語音備忘錄

iphone手機備忘錄遷移Whether you’re recording a voice message as a reminder of that million dollar idea or catching a snippet of a new song you know you’ll forget, the iPhone and iPad’s Voice Memos app is the perfect tool. 無論您是錄制語音消息來提醒這一百…

php 執行文件tar打包,利用tar for windows對大量文件進行快速打包

近期將某些網站換服務器&#xff0c;由于網站數量巨大&#xff0c;加上附件和靜態頁&#xff0c;文件數量異常多&#xff0c;考慮先打包然后直接傳過去。起初嘗試用winrar打包&#xff0c;但是發現即使選擇”僅儲存”速度仍然慢到無法接受&#xff0c;后來想到了tar&#xff0c…