jvm啓動參數設置

文章來源

https://blog.csdn.net/a718515028/article/details/86703186

https://www.cnblogs.com/jack204/archive/2012/07/02/2572934.html

1、jvm啓動參數設置OOM異常時,自動生成dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof

-XX:+HeapDumpOnOutOfMemoryError 設置當首次遭遇內存溢出時導出此時堆中相關信息
-XX:HeapDumpPath=/tmp/heapdump.hprof 指定導出堆信息時的路徑或文件名

eg:

java -Xms750m -Xmx750m -Xmn512m -Xss1024k -XX:MaxPermSize=128m
-XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+PrintGC 
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/tmp/jvm.log 
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof 
-Dfile.encoding=utf-8 -jar /data/app/test.jar
  • -Xms750表示堆內存初始值爲750M
  • -Xmx750m表示堆內存最大值750M
  • -Xmn512m 設置年輕代大小爲512m。整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小爲64m,所以增大年輕代後,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8
  • -Xss1024k 設置每個線程的堆棧大小。JDK5.0以後每個線程堆棧大小爲1M,以前每個線程堆棧大小爲256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。
  • -XX:MaxPermSize=128m 設置永久代的大小,此屬性在jdk8之後不再提供。

注:如果1.7之前爲-XX:PermSize=64m -XX:MaxPermSize=128m ,1.8需要變成
-XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m 否則起不來

  • -XX:+UseConcMarkSweepGC 設置年老代爲併發收集。測試配置這個參數以後,參數-XX:NewRatio=4就失效了,所以,此時年輕代大小最好用-Xmn設置,因此這個參數不建議使用
  • -XX:CMSFullGCsBeforeCompaction=5 由於併發收集器不對內存空間進行壓縮、整理,所以運行一段時間以後會產生“碎片”,使得運行效率降低。此參數設置運行次FullGC以後對內存空間進行壓縮、整理。
  • -XX:+UseCMSCompactAtFullCollection 打開對年老代的壓縮。可能會影響性能,但是可以消除內存碎片
  • -XX:+PrintGC 每次GC時打印相關信息
  • -XX:+PrintGCDetails 每次GC時打印詳細信息
  • -XX:+PrintGCTimeStamps 打印每次GC的時間戳
  • -Xloggc:/tmp/jvm.log 設置垃圾回收日誌打印的文件,文件名稱可以自定義
  • -XX:+HeapDumpOnOutOfMemoryError 設置當首次遭遇內存溢出時導出此時堆中相關信息
  • -XX:HeapDumpPath=/tmp/heapdump.hprof 指定導出堆信息時的路徑或文件名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章