JVM瀛︿範绗旇锛堝洓锛?鍐呭瓨璋冧紭

JVM瀛︿範绗旇锛堝洓锛?-----------鍐呭瓨璋冧紭

棣栧厛闇€瑕佹敞鎰忕殑鏄湪瀵笿VM鍐呭瓨璋冧紭鐨勬椂鍊欎笉鑳藉彧鐪嬫搷浣滅郴缁熺骇鍒獼ava杩涚▼鎵€鍗犵敤鐨勫唴瀛橈紝杩欎釜鏁板€间笉鑳藉噯纭殑鍙嶅簲鍫嗗唴瀛樼殑鐪熷疄鍗犵敤鎯呭喌锛屽洜涓篏C杩囧悗杩欎釜鍊兼槸涓嶄細鍙樺寲鐨勶紝鍥犳鍐呭瓨璋冧紭鐨勬椂鍊欒鏇村鍦颁娇鐢↗DK鎻愪緵鐨勫唴瀛樻煡鐪嬪伐鍏凤紝姣斿JConsole鍜孞ava VisualVM銆?/p>

瀵笿VM鍐呭瓨鐨勭郴缁熺骇鐨勮皟浼樹富瑕佺殑鐩殑鏄噺灏慓C鐨勯鐜囧拰Full GC鐨勬鏁帮紝杩囧鐨凣C鍜孎ull GC鏄細鍗犵敤寰堝鐨勭郴缁熻祫婧愶紙涓昏鏄疌PU锛夛紝褰卞搷绯荤粺鐨勫悶鍚愰噺銆傜壒鍒鍏虫敞Full GC锛屽洜涓哄畠浼氬鏁翠釜鍫嗚繘琛屾暣鐞嗭紝瀵艰嚧Full GC涓€鑸敱浜庝互涓嬪嚑绉嶆儏鍐碉細

  • 鏃х敓浠g┖闂翠笉瓒?br>璋冧紭鏃跺敖閲忚瀵硅薄鍦ㄦ柊鐢熶唬GC鏃惰鍥炴敹銆佽瀵硅薄鍦ㄦ柊鐢熶唬澶氬瓨娲讳竴娈垫椂闂村拰涓嶈鍒涘缓杩囧ぇ鐨勫璞″強鏁扮粍閬垮厤鐩存帴鍦ㄦ棫鐢熶唬鍒涘缓瀵硅薄聽
  • Pemanet Generation绌洪棿涓嶈冻
    澧炲ぇPerm Gen绌洪棿锛岄伩鍏嶅お澶氶潤鎬佸璞÷?/li>
  • 缁熻寰楀埌鐨凣C鍚庢檵鍗囧埌鏃х敓浠g殑骞冲潎澶у皬澶т簬鏃х敓浠e墿浣欑┖闂?br>鎺у埗濂芥柊鐢熶唬鍜屾棫鐢熶唬鐨勬瘮渚嬄?/li>
  • System.gc()琚樉绀鸿皟鐢?br>鍨冨溇鍥炴敹涓嶈鎵嬪姩瑙﹀彂锛屽敖閲忎緷闈燡VM鑷韩鐨勬満鍒堵?/li>

璋冧紭鎵嬫涓昏鏄€氳繃鎺у埗鍫嗗唴瀛樼殑鍚勪釜閮ㄥ垎鐨勬瘮渚嬪拰GC绛栫暐鏉ュ疄鐜帮紝涓嬮潰鏉ョ湅鐪嬪悇閮ㄥ垎姣斾緥涓嶈壇璁剧疆浼氬鑷翠粈涔堝悗鏋?/p>

1锛夋柊鐢熶唬璁剧疆杩囧皬

涓€鏄柊鐢熶唬GC娆℃暟闈炲父棰戠箒锛屽澶х郴缁熸秷鑰楋紱浜屾槸瀵艰嚧澶у璞$洿鎺ヨ繘鍏ユ棫鐢熶唬锛屽崰鎹簡鏃х敓浠e墿浣欑┖闂达紝璇卞彂Full GC

2锛夋柊鐢熶唬璁剧疆杩囧ぇ

涓€鏄柊鐢熶唬璁剧疆杩囧ぇ浼氬鑷存棫鐢熶唬杩囧皬锛堝爢鎬婚噺涓€瀹氾級锛屼粠鑰岃鍙慒ull GC锛涗簩鏄柊鐢熶唬GC鑰楁椂澶у箙搴﹀鍔?/p>

涓€鑸鏉ユ柊鐢熶唬鍗犳暣涓爢1/3姣旇緝鍚堥€?/p>

3锛塖urvivor璁剧疆杩囧皬

瀵艰嚧瀵硅薄浠巈den鐩存帴鍒拌揪鏃х敓浠o紝闄嶄綆浜嗗湪鏂扮敓浠g殑瀛樻椿鏃堕棿

4锛塖urvivor璁剧疆杩囧ぇ

瀵艰嚧eden杩囧皬锛屽鍔犱簡GC棰戠巼

鍙﹀锛岄€氳繃-XX:MaxTenuringThreshold=n鏉ユ帶鍒舵柊鐢熶唬瀛樻椿鏃堕棿锛屽敖閲忚瀵硅薄鍦ㄦ柊鐢熶唬琚洖鏀?/p>

鐢变笂涓€绡囧崥鏂?a href="http://blog.****.net/cutesource/archive/2010/09/26/5906705.aspx">JVM瀛︿範绗旇锛堜笁锛?-----鍐呭瓨绠$悊鍜屽瀮鍦惧洖鏀?/span>鍙煡鏂扮敓浠e拰鏃х敓浠i兘鏈夊绉岹C绛栫暐鍜岀粍鍚堟惌閰嶏紝閫夋嫨杩欎簺绛栫暐瀵逛簬鎴戜滑杩欎簺寮€鍙戜汉鍛樻槸涓毦棰橈紝JVM鎻愪緵涓ょ杈冧负绠€鍗曠殑GC绛栫暐鐨勮缃柟寮?/p>

1锛夊悶鍚愰噺浼樺厛

JVM浠ュ悶鍚愰噺涓烘寚鏍囷紝鑷閫夋嫨鐩稿簲鐨凣C绛栫暐鍙婃帶鍒舵柊鐢熶唬涓庢棫鐢熶唬鐨勫ぇ灏忔瘮渚嬶紝鏉ヨ揪鍒板悶鍚愰噺鎸囨爣銆傝繖涓€煎彲鐢?XX:GCTimeRatio=n鏉ヨ缃?/p>

2锛夋殏鍋滄椂闂翠紭鍏?/p>

JVM浠ユ殏鍋滄椂闂翠负鎸囨爣锛岃嚜琛岄€夋嫨鐩稿簲鐨凣C绛栫暐鍙婃帶鍒舵柊鐢熶唬涓庢棫鐢熶唬鐨勫ぇ灏忔瘮渚嬶紝灏介噺淇濊瘉姣忔GC閫犳垚鐨勫簲鐢ㄥ仠姝㈡椂闂撮兘鍦ㄦ寚瀹氱殑鏁板€艰寖鍥村唴瀹屾垚銆傝繖涓€煎彲鐢?XX:MaxGCPauseRatio=n鏉ヨ缃?/p>

鏈€鍚庢眹鎬讳竴涓婮VM甯歌閰嶇疆

  1. 鍫嗚缃?
    • -Xms:鍒濆鍫嗗ぇ灏?/li>
    • -Xmx:鏈€澶у爢澶у皬
    • -XX:NewSize=n:璁剧疆骞磋交浠eぇ灏?/li>
    • -XX:NewRatio=n:璁剧疆骞磋交浠e拰骞磋€佷唬鐨勬瘮鍊笺€傚:涓?锛岃〃绀哄勾杞讳唬涓庡勾鑰佷唬姣斿€间负1锛?锛屽勾杞讳唬鍗犳暣涓勾杞讳唬骞磋€佷唬鍜岀殑1/4
    • -XX:SurvivorRatio=n:骞磋交浠d腑Eden鍖轰笌涓や釜Survivor鍖虹殑姣斿€笺€傛敞鎰廠urvivor鍖烘湁涓や釜銆傚锛?锛岃〃绀篍den锛歋urvivor=3锛?锛屼竴涓猄urvivor鍖哄崰鏁翠釜骞磋交浠g殑1/5
    • -XX:MaxPermSize=n:璁剧疆鎸佷箙浠eぇ灏?/li>
  2. 鏀堕泦鍣ㄨ缃?
    • -XX:+UseSerialGC:璁剧疆涓茶鏀堕泦鍣?/li>
    • -XX:+UseParallelGC:璁剧疆骞惰鏀堕泦鍣?/li>
    • -XX:+UseParalledlOldGC:璁剧疆骞惰骞磋€佷唬鏀堕泦鍣?/li>
    • -XX:+UseConcMarkSweepGC:璁剧疆骞跺彂鏀堕泦鍣?/li>
  3. 鍨冨溇鍥炴敹缁熻淇℃伅
    • -XX:+PrintGC
    • -XX:+PrintGCDetails
    • -XX:+PrintGCTimeStamps
    • -Xloggc:filename
  4. 骞惰鏀堕泦鍣ㄨ缃?
    • -XX:ParallelGCThreads=n:璁剧疆骞惰鏀堕泦鍣ㄦ敹闆嗘椂浣跨敤鐨凜PU鏁般€傚苟琛屾敹闆嗙嚎绋嬫暟銆?/li>
    • -XX:MaxGCPauseMillis=n:璁剧疆骞惰鏀堕泦鏈€澶ф殏鍋滄椂闂?/li>
    • -XX:GCTimeRatio=n:璁剧疆鍨冨溇鍥炴敹鏃堕棿鍗犵▼搴忚繍琛屾椂闂寸殑鐧惧垎姣斻€傚叕寮忎负1/(1+n)
  5. 骞跺彂鏀堕泦鍣ㄨ缃?
    • -XX:+CMSIncrementalMode:璁剧疆涓哄閲忔ā寮忋€傞€傜敤浜庡崟CPU鎯呭喌銆?/li>
    • -XX:ParallelGCThreads=n:璁剧疆骞跺彂鏀堕泦鍣ㄥ勾杞讳唬鏀堕泦鏂瑰紡涓哄苟琛屾敹闆嗘椂锛屼娇鐢ㄧ殑CPU鏁般€傚苟琛屾敹闆嗙嚎绋嬫暟銆?/li>

闄勶細

鏈郴鍒楀涔犺祫鏂欎富瑕佹潵鑷崥鏂?a href="http://rednaxelafx.javaeye.com/blog/656951">http://rednaxelafx.javaeye.com/blog/656951閲屾彁鍒扮殑PPT鍜屻€婂垎甯冨紡Java搴旂敤銆嬮噷鏈夊叧JVM鐨勭珷鑺傦紝鎺ㄨ崘澶у缁х画娣卞叆瀛︿範