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

JVM基礎:生產環境參數實例及分析

開發 后端
文章介紹了JVM生成環境參數實例及分析,增加了多個生成環境實例,詳細請看下文。

java application項目(非web項目)

改進前:

  1. -Xms128m  
  2. -Xmx128m  
  3. -XX:NewSize=64m  
  4. -XX:PermSize=64m  
  5. -XX:+UseConcMarkSweepGC  
  6. -XX:CMSInitiatingOccupancyFraction=78 
  7. -XX:ThreadStackSize=128-Xloggc:logs/gc.log  
  8. -Dsun.rmi.dgc.server.gcInterval=3600000 
  9. -Dsun.rmi.dgc.client.gcInterval=3600000 
  10. -Dsun.rmi.server.exceptionTrace=true 

問題:

◆  permsize 設置較小,很容易達到報警范圍(0.8)

◆ 沒有設置MaxPermSize,堆增長會帶來額外壓力。

◆ NewSize較大,old gen 剩余空間64m,一方面可能會帶來old區容易增長到報警范圍(監控數據顯示oldgenused長期在50m左右,接近78%,容易出現full gc),另一方面也存在promontion fail風險。

改進后:

  1. -Xms128m  
  2. -Xmx128m  
  3. -Xmn24m  
  4. -XX:PermSize=80m  
  5. -XX:MaxPermSize=80m  
  6. -Xss256k-XX:SurvivorRatio=1 
  7. -XX:MaxTenuringThreshold=20 
  8. -XX:+UseParNewGC  
  9. -XX:+UseConcMarkSweepGC  
  10. -XX:CMSInitiatingOccupancyFraction=75 
  11. -XX:+UseCMSCompactAtFullCollection  
  12. -XX:+CMSParallelRemarkEnabled  
  13. -XX:CMSFullGCsBeforeCompaction=2 
  14. -XX:SoftRefLRUPolicyMSPerMB=0 
  15. -XX:+PrintClassHistogram  
  16. -XX:+PrintGCDetails  
  17. -XX:+PrintGCTimeStamps  
  18. -XX:+PrintHeapAtGC  
  19. -Xloggc:logs/gc.log  
  20. -Dsun.rmi.dgc.server.gcInterval=3600000 
  21. -Dsun.rmi.dgc.client.gcInterval=3600000 
  22. -Dsun.rmi.server.exceptionTrace=true 

修改點:

◆ PermSize與MaxPermSize都設置為80,一方面避免non heap warn(報警閥值0.8 非對內存一般占用到60M以內),一方面避免堆伸縮帶來的壓力

◆ 通過設置Xmn=24M及SurvivorRatio=1 使得Eden區=from space=to space=8M,降低了Eden區大小,降低YGC的時間(降低到3-4ms左右),同時通過設MaxTenuringThreshold=20,使得old gen的增長很緩慢。帶來的問題是YGC的次數明顯提高了很多。

◆ 其他參數優化 修改后帶來的好處見JVM參數設置

再次改進后

  1. -Xms128m  
  2. -Xmx128m  
  3. -Xmn36m  
  4. -XX:PermSize=80m  
  5. -XX:MaxPermSize=80m  
  6. -Xss256k  
  7. -XX:SurvivorRatio=1 
  8. -XX:MaxTenuringThreshold=20 
  9. -XX:+UseParNewGC  
  10. -XX:+UseConcMarkSweepGC  
  11. -XX:CMSInitiatingOccupancyFraction=73 
  12. -XX:+UseCMSCompactAtFullCollection  
  13. -XX:+CMSParallelRemarkEnabled  
  14. -XX:CMSFullGCsBeforeCompaction=2 
  15. -XX:SoftRefLRUPolicyMSPerMB=0 
  16. -XX:+PrintClassHistogram  
  17. -XX:+PrintGCDetails  
  18. -XX:+PrintGCTimeStamps  
  19. -XX:+PrintHeapAtGC  
  20. -Xloggc:logs/gc.log  
  21. -Dsun.rmi.dgc.server.gcInterval=3600000 
  22. -Dsun.rmi.dgc.client.gcInterval=3600000 
  23. -Dsun.rmi.server.exceptionTrace=true 

修改點:

在上面的基礎上調整Xmn大小到36M,設置CMSInitiatingOccupancyFraction=73。

Dden區與Survivor區大小都增加到12M,通過CMSInitiatingOccupancyFraction計算公式,計算得出value為73是,可以避免promotion faild問題,同時滿足堆內存監控報警值在80%:內存大小128M*80%=102.4M 102.4M-36M=66.4M(老生代達到此值報警) 老生代達到67.15M(92M*0.73)將發生Full GC,所以在老生代大小達到66.4M時也就是WARN報警時將很有可能出現Full GC。

增大了Eden和Survivor區的值,會減小YGC的次數,但由于空間變大理論上也會相應的增加YGC的時間,不過由于新生代本身就很小(才36M)這點兒變化可以忽略掉。實際的監控值顯示YGC的時間在4-5ms之間。是可以接受范圍。

SurvivorRatio 這個值還得在仔細考慮下,有待優化中

網上某個牛人的配置 :每天幾百萬pv一點問題都沒有,網站沒有停頓

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

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

-Xnoclassgc禁用類垃圾回收,性能會高一點;

-XX:+DisableExplicitGC禁止System.gc(),免得程序員誤調用gc方法影響性能;

-XX:+UseParNewGC,對年輕代采用多線程并行回收,這樣收得快;

帶CMS參數的都是和并發回收相關的,不明白的可以上網搜索;

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

SoftRefLRUPolicyMSPerMB這個參數我認為可能有點用,官方解釋是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秒;

  1. -Xmx4000M  
  2. -Xms4000M  
  3. -Xmn600M  
  4. -XX:PermSize=500M  
  5. -XX:MaxPermSize=500M  
  6. -Xss256K  
  7. -XX:+DisableExplicitGC  
  8. -XX:SurvivorRatio=1 
  9. -XX:+UseConcMarkSweepGC  
  10. -XX:+UseParNewGC  
  11. -XX:+CMSParallelRemarkEnabled  
  12. -XX:+UseCMSCompactAtFullCollection  
  13. -XX:CMSFullGCsBeforeCompaction=0 
  14. -XX:+CMSClassUnloadingEnabled  
  15. -XX:LargePageSizeInBytes=128M  
  16. -XX:+UseFastAccessorMethods  
  17. -XX:+UseCMSInitiatingOccupancyOnly  
  18. -XX:CMSInitiatingOccupancyFraction=80 
  19. -XX:SoftRefLRUPolicyMSPerMB=0 
  20. -XX:+PrintClassHistogram  
  21. -XX:+PrintGCDetails  
  22. -XX:+PrintGCTimeStamps  
  23. -XX:+PrintHeapAtGC  
  24. -Xloggc:log/gc.log 

改進方案:

上面方法不太好,因為沒有用到救助空間,所以年老代容易滿,CMS執行會比較頻繁。我改善了一下,還是用救助空間,但是把救助空間加大,這樣也不會有promotion failed。
具體操作上,32位Linux和64位Linux好像不一樣,64位系統似乎只要配置MaxTenuringThreshold參數,CMS還是有暫停。為了解決暫停問題和promotion failed問題,***我設置-XX:SurvivorRatio=1 ,并把MaxTenuringThreshold去掉,這樣即沒有暫停又不會有promotoin failed,而且更重要的是,年老代和***代上升非常慢(因為好多對象到不了年老代就被回收了),所以CMS執行頻率非常低,好幾個小時才執行一次,這樣,服務器都不用重啟了。

某網友:

  1. $JAVA_ARGS  
  2. .="  
  3. -Dresin.home=$SERVER_ROOT  
  4. -server  
  5. -Xmx3000M  
  6. -Xms3000M  
  7. -Xmn600M  
  8. -XX:PermSize=500M  
  9. -XX:MaxPermSize=500M  
  10. -Xss256K  
  11. -XX:+DisableExplicitGC  
  12. -XX:SurvivorRatio=1 
  13. -XX:+UseConcMarkSweepGC  
  14. -XX:+UseParNewGC  
  15. -XX:+CMSParallelRemarkEnabled  
  16. -XX:+UseCMSCompactAtFullCollection  
  17. -XX:CMSFullGCsBeforeCompaction=0 
  18. -XX:+CMSClassUnloadingEnabled  
  19. -XX:LargePageSizeInBytes=128M  
  20. -XX:+UseFastAccessorMethods  
  21. -XX:+UseCMSInitiatingOccupancyOnly  
  22. -XX:CMSInitiatingOccupancyFraction=70 
  23. -XX:SoftRefLRUPolicyMSPerMB=0 
  24. -XX:+PrintClassHistogram  
  25. -XX:+PrintGCDetails  
  26. -XX:+PrintGCTimeStamps  
  27. -XX:+PrintHeapAtGC  
  28. -Xloggc:log/gc.log"; 

64位jdk參考設置,年老代漲得很慢,CMS執行頻率變小,CMS沒有停滯,也不會有promotion failed問題,內存回收得很干凈。

參考:JVM參數調優,無停滯實踐

原文鏈接:http://www.cnblogs.com/redcreen/archive/2011/05/05/2038331.html

【系列文章】 

  1. JVM基礎:JVM監測&工具
  2. JVM基礎:JVM參數設置、分析
  3. JVM基礎:GC策略&內存申請、對象衰老
  4. JVM基礎:JVM內存組成及分配
責任編輯:林師授 來源: redcreen的博客
相關推薦

2012-01-11 11:28:00

JavaJVM

2021-07-26 12:56:33

JVM參數環境

2012-09-27 10:50:39

自動化監控

2012-01-11 10:45:57

JavaJVM

2010-03-04 10:56:52

JVM參數

2010-01-08 16:01:19

華為交換機DHCP

2010-09-26 09:31:27

JVM啟動參數

2020-10-30 08:35:23

Java Virtua

2023-01-26 00:25:09

JVM設置技術

2012-01-11 13:04:40

JavaJVM

2009-07-08 11:11:23

JVM

2021-04-12 09:36:14

JVM生產問題JVM FULL GC

2010-09-25 13:31:00

TomcatJVM

2010-09-27 08:38:49

JVM堆JVM棧

2015-08-27 14:59:58

SSISParameterEnvironment

2011-08-24 17:41:16

MySQL死鎖

2022-09-01 08:50:22

kubernetes容器

2020-07-21 14:19:18

JVM編程語言

2017-06-14 22:11:57

數據庫MySQL死鎖

2015-03-31 11:24:02

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 热久久久 | 久久精品亚洲精品 | av在线免费网 | 国产一区二区三区四区 | 国产精品亚洲片在线播放 | 一区二区av | 久久精品中文字幕 | 天天看天天操 | 国产99久久久国产精品 | 欧美九九 | 中文字幕一区二区三区不卡 | 久久99久久99久久 | 91在线精品播放 | 欧美日韩免费视频 | 欧美在线综合 | 超碰人人爱 | 99久久亚洲 | 黄色片免费 | 羞羞视频在线观看网站 | 国产精品免费一区二区三区四区 | 国产精品久久久久久亚洲调教 | 日韩一区二区三区四区五区 | 成年男女免费视频网站 | 久久www免费视频 | 亚洲精品视频一区 | 日韩欧美三级 | 欧美大片一区二区 | 91久久国产 | av片毛片 | 高清国产午夜精品久久久久久 | 日本一区视频在线观看 | 国内精品免费久久久久软件老师 | 精品一区二区三区四区 | 毛片在线免费 | 全部免费毛片在线播放网站 | 成年人免费在线视频 | 国产粉嫩尤物极品99综合精品 | 国产精品欧美一区二区三区 | 日韩在线播放视频 | 国产日韩久久 | 国产二区精品视频 |