日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令

發布時間:2024/9/27 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

73.JVM內存基礎結構,參數分類,推薦的配置項,參數混用問題,常用工具,常用命令
73.1.堆內存基本結構
73.2.參數分類
73.3.推薦的配置項
73.4.參數混用問題
73.5.常用命令

73.JVM內存基礎結構,參數分類,推薦的配置項,參數混用問題,常用工具,常用命令

73.1.堆內存基本結構

注:以下內容無特殊說明都是jdk7 hotspot虛擬機環境下的配置。

73.2.參數分類

JVM啟動參數共分為三類:
1、標準參數(-),所有的JVM實現都必須實現這些參數的功能,而且向后兼容。例如: -verbose:gc(輸出每次GC的相關情況);-verbose:jni(輸出native方法調用的相關情況,一般用于診斷jni調用錯誤信息)。

2、非標準參數(-X),默認jvm實現這些參數的功能,但是并不保證所有jvm實現都滿足,且不保證向后兼容。例如:-Xms512m;-Xmx512m;-Xmn200m;-Xss128k;-Xloggc:file(與-verbose:gc功能類似,只是將每次GC事件的相關情況記錄到一個文件中,文件的位置最好在本地,以避免網絡的潛在問題。若與verbose命令同時出現在命令行中,則以-Xloggc為準)。

3、非Stable(穩態)參數(-XX),此類參數各個jvm實現會有所不同,將來可能會隨時取消,需要慎重使用。例如:-XX:PermSize=64m;-XX:MaxPermSize=512m。
非穩態選項使用說明:
-XX:+ 啟用option
-XX:- 不啟用option
-XX:= 設定option的值為數字類型,可跟單位,例如 32k, 1024m, 2g
-XX:= 設定option的值為字符串,例如-XX:HeapDumpPath=./dump.core

73.3.推薦的配置項

生產庫tomcat/bin/catalina.sh統一配置

JAVA_OPTS=" #堆內存各區域大小配置 -Xms2048m #初始堆大小,與Xmx配置一樣避免內存申請帶來的資源消耗 -Xmx2048m #堆最大容量 -Xss256k #每個線程的堆棧大小,不占用堆空間,jdk5之前默認為256k之后為1M #Xmn通常占整個堆大小的3/10,-XX:NewRatio=年輕代:年老代,-XX:NewSize/-XX:MaxNewSize,看值是否合適可以執行GC看老年代回收的空間是否比較多,可以調整年輕代大小和對象進入老年代年齡大小(-XX:InitialTenuringThreshold=7, -XX:MaxTenuringThreshold=15(7和15也是默認值))進行設置 -Xmn680m -XX:SurvivorRatio=8 #s0+s1:eden 配置成8也就是2:8 一個s0占1/10新生代大小,默認8 -XX:PermSize=256m #永久代即代碼和類結構存儲區初始大小,默認64m -XX:MaxPermSize=256m #jdk8廢除永久代新增元空間,類加載器不用時移除所用所有空間 -XX:MetaspaceSize=12M -XX:MaxMetaspaceSize=36M -XX:-UseAdaptiveSizePolicy #禁用jvm自動調整內存比例,jdk1.6、1.7下會導致每經過一次minor GC Survivor區會減少大概1M空間(減少部分累加到eden區域)直至降至1M導致一直進行垃圾回收CPU 100%運行#OOM(OutOfMemeoryError)配置 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/work/tomcat/jvmlogs/oomDump.dump -XX:OnOutOfMemoryError=/usr/local/tomcat/bin/restart.sh #當內存溢出發生時執行一個腳本 #GC日志配置 -XX:+PrintGCDetails -XX:+PrintGCDateStamps #輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC #在進行GC的前后打印出堆的信息 -XX:+PrintTenuringDistribution #打印年輕代存活年齡 例:- age 2: 2436856 bytes, 6782256 total,對于XX:MaxTenuringThreshold值設置有很大參考價值 -Xloggc:/usr/local/work/tomcat3/logs/jvmgc.log #GC日志文件路徑 #日志格式

#Jconsole遠程調試配置,調試期間開啟(生產庫請勿長期開啟) -Djava.rmi.server.hostname=112.124.121.127 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8899 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "

73.4.參數混用問題

-Xmn,-XX:NewSize/-XX:MaxNewSize,-XX:NewRatio 3組參數都可以影響年輕代的大小,混合使用的情況下,優先級是什么?
如下:
高優先級:-XX:NewSize/-XX:MaxNewSize
中優先級:-Xmn(默認等效 -Xmn=-XX:NewSize=-XX:MaxNewSize=?)
低優先級:-XX:NewRatio
推薦使用-Xmn參數,原因是這個參數簡潔,相當于一次設定 NewSize/MaxNewSIze,而且兩者相等,適用于生產環境。-Xmn 配合 -Xms/-Xmx,即可將堆內存布局完成。

73.5.常用命令

jmap -heap pid


jps -v 查看當前運行的java進程類似ps -ef|grep java

jcmd PID VM.flags 查看JVM的啟動參數

jcmd pid VM.system_properties 顯示系統信息

jcmd pid GC.run 手動執行一次Full GC,功能類似直接調用java.lang.System.gc()

jcmd pid GC.heap_dump /usr/local/dump.hprof 導出HPROF格式的內存信息,保存到文件中。

jcmd pid Thread.print 這里和jstack -l pid的效果是一樣的。

jcmd PID GC.class_histogram 查看類及對象數量和大小統計信息,類似jmap -histo pid

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。