成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM參數(shù)調(diào)優(yōu)實(shí)例解析

開發(fā) 后端
要想做好JVM參數(shù)的調(diào)優(yōu),需要對年輕代、年老代、救助空間和永久代有一定了解,還要了解JVM內(nèi)存管理邏輯,最終還要根據(jù)自己的應(yīng)用來做調(diào)整,各個方面都要把握好。

關(guān)于JVM參數(shù)調(diào)優(yōu),對于很多程序員來說都是很頭痛的問題,如果設(shè)置的不好,JVM不斷執(zhí)行Full GC,將導(dǎo)致整個系統(tǒng)變得很慢,網(wǎng)站停滯時間能達(dá)10秒以上,這種情況如果沒隔幾分鐘就來一次,自己都受不了。

這種停滯在測試的時候看不出來,只有網(wǎng)站pv達(dá)到數(shù)十萬/天的時候問題就暴露出來了,要想配置好JVM參數(shù),需要對年輕代、年老代、救助空間和***代有一定了解,還要了解JVM內(nèi)存管理邏輯,最終還要根據(jù)自己的應(yīng)用來做調(diào)整。關(guān)于JVM參數(shù)上網(wǎng)一搜就能搜出一大把,也有很多提供實(shí)踐的例子,我也按照各種例子測試過,最終還是會出現(xiàn)問題,經(jīng)過幾個月的實(shí)踐改善,我就網(wǎng)站(要求無停滯時間)的jvm參數(shù)調(diào)優(yōu)給出以下幾條經(jīng)驗(yàn)。

1:建議用64位操作系統(tǒng),Linux下64位的JDK比32位JDK要慢一些,但是吃得內(nèi)存更多,吞吐量更大。

2:XMX和XMS設(shè)置一樣大,MaxPermSize和MinPermSize設(shè)置一樣大,這樣可以減輕伸縮堆大小帶來的壓力。

3:調(diào)試的時候設(shè)置一些打印參數(shù),如-XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log,這樣可以從gc.log里看出一些端倪出來。

4:系統(tǒng)停頓的時候可能是GC的問題也可能是程序的問題,多用Jmap和Jstack查看,或者killall -3 Java,然后查看Java控制臺日志,能看出很多問題。有一次,網(wǎng)站突然很慢,Jstack一看,原來是自己寫的URL Connection連接太多沒有釋放,改一下程序就OK了。

5:仔細(xì)了解自己的應(yīng)用,如果用了緩存,那么年老代應(yīng)該大一些,緩存的HashMap不應(yīng)該無限制長,建議采用LRU算法的Map做緩存,LRUMap的***長度也要根據(jù)實(shí)際情況設(shè)定。

6:垃圾回收時Promotion Failed是個很頭痛的問題,一般可能是兩種原因產(chǎn)生,***個原因是救助空間不夠,救助空間里的對象還不應(yīng)該被移動到年老代,但年輕代又有很多對象需要放入救助空間;第二個原因是年老代沒有足夠的空間接納來自年輕代的對象;這兩種情況都會轉(zhuǎn)向Full GC,網(wǎng)站停頓時間較長。***個原因我的最終解決辦法是去掉救助空間,設(shè)置-XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0即可,第二個原因我的解決辦法是設(shè)置CMSInitiatingOccupancyFraction為某個值(假設(shè)70),這樣年老代空間到70%時就開始執(zhí)行CMS,年老代有足夠的空間接納來自年輕代的對象。

7:不管怎樣,***代還是會逐漸變滿,所以隔三差五重起Java服務(wù)器是必要的,我每天都自動重起。

8:采用并發(fā)回收時,年輕代小一點(diǎn),年老代要大,因?yàn)槟昀洗笥玫氖遣l(fā)回收,即使時間長點(diǎn)也不會影響其他程序繼續(xù)運(yùn)行,網(wǎng)站不會停頓,我的最終配置如下(系統(tǒng)8G內(nèi)存),每天幾百萬PV一點(diǎn)問題都沒有,網(wǎng)站沒有停頓,2009年網(wǎng)站沒有因?yàn)閮?nèi)存問題down過機(jī)。

  1.  
  2. $JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms6000M -Xmx6000M -Xmn500M -XX:PermSize=500M   
  3.  
  4. -XX:MaxPermSize=500M -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -Xnoclassgc -XX:+DisableExplicitGC   
  5.  
  6. -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection   
  7.  
  8. -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled   
  9.  
  10. -XX:CMSInitiatingOccupancyFraction=90 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram   
  11.  
  12. -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log ";  
  13.  

說明一下,-XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0就是去掉了救助空間:

◆-Xnoclassgc禁用類垃圾回收,性能會高一點(diǎn);
◆-XX:+DisableExplicitGC禁止System.gc(),免得程序員誤調(diào)用gc方法影響性能;
◆-XX:+UseParNewGC,對年輕代采用多線程并行回收,這樣收得快;帶CMS參數(shù)的都是和并發(fā)回收相關(guān)的。

CMSInitiatingOccupancyFraction

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

SoftRefLRUPolicyMSPerMB

這個參數(shù)我認(rèn)為可能有點(diǎn)用,官方解釋是softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap,我覺得沒必要等1秒;

網(wǎng)上其他介紹JVM參數(shù)的也比較多,估計(jì)其中大部分是沒有遇到Promotion Failed,或者訪問量太小沒有機(jī)會遇到,(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn這個公式絕對是原創(chuàng),真遇到Promotion Failed了,還得這么處理。

文章轉(zhuǎn)載自wezly的博客,

原文地址:http://wezly.javaeye.com/blog/607308

【編輯推薦】

  1. 高手教大家如何配置JVM參數(shù)
  2. 實(shí)例講解JVM參數(shù)調(diào)優(yōu)的八條經(jīng)驗(yàn)
  3. JVM內(nèi)存模型及垃圾收集策略解析
  4. 圖解JVM分代垃圾回收流程與算法的選擇
  5. Java的未來:百家爭鳴的JVM
責(zé)任編輯:王曉東 來源: Javaeye博客
相關(guān)推薦

2010-09-26 13:39:46

JVM調(diào)優(yōu)

2010-09-25 13:05:07

JVM參數(shù)

2023-11-10 11:23:20

JVM內(nèi)存

2009-07-08 11:11:23

JVM

2012-01-10 14:35:08

JavaJVM

2010-09-17 17:02:24

JVM參數(shù)

2017-07-21 08:55:13

TomcatJVM容器

2023-11-11 19:07:23

JVMJava

2021-09-06 11:02:17

JVM架構(gòu)調(diào)優(yōu)

2021-03-17 11:35:11

JVM代碼Java

2010-09-26 09:08:17

JVM調(diào)優(yōu)

2012-01-10 15:13:56

JavaJVM

2017-10-13 15:16:38

Java服務(wù)GC參數(shù)

2021-06-03 08:32:18

JVM調(diào)優(yōu)虛擬機(jī)

2017-10-17 14:02:30

jvm調(diào)優(yōu)工具

2017-09-22 15:15:23

jvm調(diào)優(yōu)命令

2021-11-21 23:03:38

jvm調(diào)優(yōu)虛擬機(jī)

2010-09-27 09:23:42

JVM調(diào)優(yōu)

2024-12-04 15:49:29

2010-09-26 10:53:00

JVM內(nèi)存調(diào)優(yōu)設(shè)置
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 毛片在线免费 | 日韩精品在线免费观看视频 | 高清国产午夜精品久久久久久 | 日韩精品在线播放 | 日韩视频高清 | 亚洲综合视频 | 99久久精品免费看国产高清 | 久久久不卡网国产精品一区 | 免费黄色片在线观看 | 麻豆av网站| 91视频国产精品 | 天天看逼| 精品成人av| 三级黄色片在线播放 | 久久久123| 日韩av在线中文字幕 | 欧美一区二区综合 | 欧洲一级毛片 | 亚洲精品www | 国内精品久久久久久 | 国产成人综合一区二区三区 | 黄色毛片一级 | 日韩亚洲一区二区 | 亚洲啊v在线 | 欧美午夜影院 | 久久久久国产一区二区三区四区 | 99re热精品视频 | 女人一区 | 一区二区三区欧美 | 天天爽综合网 | 国产精品2区 | 在线看片国产精品 | 中文字幕亚洲区一区二 | 成人亚洲精品久久久久软件 | 91成人免费看片 | 国产成人精品一区二区三区在线观看 | 国产在线观看一区二区三区 | 日本精品一区二区三区在线观看 | 国产精品毛片久久久久久久 | 成人免费视频网站在线看 | 搞黄视频免费看 |