jar包啓動中的JVM參數設置

1.nohup
nohup: 不掛斷的運行,注意並沒有後臺運行的功能.用nohup命令可以使命令永久的執行,和客戶端沒有任何關係.
&: 後臺運行

nohup java -jar xxx.jar &   
可以讓jar包一直後臺運行
缺省的情況下會默認將信息輸出到nohup.out文件中

2.-server
啓動server版的jvm

3.JVM的內存分配
-Xms: 分配堆最小內存(初始堆大小),默認爲物理內存的1/64,空餘堆內存小於40%時,jvm就會增大堆內存大小直到xmx
-Xmx: 分配堆最大內存,默認爲物理內存的1/4,默認空餘堆內存大於70%,jvm就會減小堆內存大小直到xms
-Xmn: 年輕代大小,整個堆大小=年輕代大小+年老代大小+持久代大小,當增大年輕代大小時,就會減小年老代大小
    此值對系統性能影響較大,sun官方推薦爲整個堆得3/8
-XX:NewSize: 設置年輕代大小
-XX:MaxNewSize: 年輕代最大值
-XX:PermSize: 設置持久代初始值,默認爲物理內存的1/64
-XX:MaxPermSize: 設置持久代最大值,默認爲物理內存的1/4
-Xss: 每個線程的堆棧大小,jdk5.0後每個線程堆棧大小爲1M,以前每個線程堆棧大小爲256k,根據應用的線程所需內存
    大小進行調整.在相同物理內存下,減小該值能生成更多的線程,但是操作系統對一個進程的線程數一般限制在3000
    -5000左右. 一般小的應用可以設置爲128k,大的建議設置爲256k.
-XX:ThreadStackSize: 線程堆大小,一般設置-Xss就可以了
-XX:NewRatio: 年輕代與年老代的比值(除去持久代),-XX:NewRatio=4表示年輕代與年老代所佔比值爲1:4,Xms=Xmx並
    且設置了Xmn的情況下,該參數不需要進行設置
-XX:SurvivorRatio: Eden區和Survivor區的大小比值, 設置爲8,則兩個Survivor區與一個Eden區的比值爲2:8,一個
    Survivor區佔整個年輕代的1/10
-XX:LargePageSizeInBytes: 內存頁的大小不可設置過大,會影響Perm的大小,128m
-XX:+UseFastAccessorMethods: 原始類型的快速優化
-XX:+DisableExplicitGC: 關閉System.gc(), System.gc()用於調用垃圾收集器,在調用時,垃圾收集器將運行以回收
    未使用的內存空間,它將釋放被丟棄對象佔用的內存.一般分配內存後,可以不可慮內存管理.
-XX:MaxTenuringThreshold: 垃圾最大年齡,年輕代的最大存活週期,超過閾值就會進入年老代
-XX:+AggressiveOpts: 加快編譯
-XX:+UseBiasedLocking: 鎖機制的性能改善
-Xnoclassgc: 禁用垃圾回收
-XX:SoftRefLRUPolicyMSPerMB: 每兆堆空閒空間中SoftRefrence的存活時間,判斷軟引用對象有多久時間沒有被使用
    則被回收,默認是1s
-XX:PretenureSizeThreshold: 對象超過多大事直接在舊生代分配,默認是0
-XX:TLABWasteTargetPercent: TLAB佔eden區的百分比,默認是1%
-XX:+CollectGen0First: FullGC時是否先YGC,默認是false
YGC: 對新生代堆進行gc ; FullGC: 全堆範圍的gc,默認堆空間使用到達80%的時候會觸發fgc.

並行收集器相關參數:
-XX:+UseParallelGC: Full GC採用parallel MSC,選擇垃圾收集器爲並行收集器,此配置僅對年輕代有效,即上述配置下,年輕代使用並行收集,
    年老代仍舊使用串行收集
-XX:+UseParNewGC: 設置年輕代爲並行收集,可與CMS收集同時使用,jdk5.0以後,JVM會根據系統配置自行設置,所以無需再設置此值
-XX:ParallelGCThreads: 並行收集器的線程數,此值最好配置與處理器數目相等,同樣適用於CMS
-XX:+UseParallelOldGC: 年老代垃圾收集方式爲並行收集(Parallel Compacting)
-XX:MaxGCPauseMillis: 每次年輕代垃圾回收的最長時間(最大暫停時間),如果無法滿足此時間,JVM會自動調整年輕代大小,以滿足此值.
-XX:+UseAdaptiveSizePolicy: 自動選擇年輕代區大小和相應的Survivor區比例,設置此選項後,並行收集器會自動選擇年輕代區大小和相應的
    Survivor區比例,以達到目標系統規定的最低相應時間或者收集頻率等,此值建議使用並行收集器時,一直打開.
-XX:GCTimeRatio: 設置垃圾回收時間佔程序運行時間的百分比,公式爲1/(1+n)
-XX:+ScavengeBeforeFullGC: Full GC前調用YGC,默認爲true
CMS相關參數:
-XX:+UseConcMarkSweepGC: 使用CMS內存收集
-XX:+AggressiveHeap: 
-XX:CMSFullGCsBeforeCompaction: 多少次後進行內存壓縮,由於併發收集器不對內存空間進行壓縮,整理,所以運行一段時間以後會產生"碎片",
    使得運行效率降低.此值設置運行多少次GC以後對內存空間進行壓縮,整理.
-XX:+CMSParallelRemarkEnabled: 降低標記停頓
-XX:+UseCMSCompactAtFullCollection: 在FULL GC時候,對年老代的壓縮,CMS是不會移動內存的, 因此, 這個非常容易產生碎片, 導致內存
    不夠用,因此,內存的壓縮這個時候就會被啓用.增加這個參數是個好習慣.可能會影響性能,但是可以消除碎片
-XX:+UseCMSInitiatingOccupancyOnly: 使用手動定義初始化定義開始CMS收集,禁止hostspot自行觸發CMS GC
-XX:CMSInitiatingOccupancyFraction=70: 使用cms作爲垃圾回收,使用70%後開始CMS收集,默認是92
-XX:CMSInitiatingPermOccupancyFraction: 設置Perm Gen使用到達多少比率時觸發,默認是92
-XX:+CMSIncrementalMode: 設置爲增量模式,用於單CPU情況
-XX:+CMSClassUnloadingEnabled:
輔助信息:
-XX:+PrintGC:
-XX:+PrintGCDetails:
-XX:+PrintGCTimeStamps:
-XX:+PrintGC:PrintGCTimeStamps:
-XX:+PrintGCApplicationStoppedTime: 打印垃圾回收期間程序暫停的時間.可與上面混合使用
-XX:+PrintGCApplicationConcurrentTime: 打印每次垃圾回收前,程序未中斷的執行時間.可與上面混合使用
-XX:+PrintHeapAtGC: 打印GC前後的詳細堆棧信息
-Xloggc:filename: 把相關日誌信息記錄到文件以便分析.
-XX:+PrintClassHistogram:
-XX:+PrintTLAB: 查看TLAB空間的使用情況
XX:+PrintTenuringDistribution: 查看每次minor GC後新的存活週期的閾值

-verbose:gc和-XX:+PrintGC是一樣的
-Duser.timezone: 設置用戶所在時區
-Djava.awt.headless=true: 開啓headless模式,可針對特殊情況的一些數據圖片的處理顯示等

標準輸入  0  從鍵盤獲得輸入(默認)
標準輸出  1     輸出到屏幕(即控制檯)
錯誤輸出  2  輸出到屏幕(即控制檯)

一般執行shell命令,都默認是從鍵盤獲得輸入,並且將結果輸出到控制檯上.但是我們可以通過更改文件描述符默認的指向,從而實現輸入輸出的
重定向.比如將1指向文件,那麼標準的輸出就會輸出到文件中.

輸出重定向:
command > filename    把標準輸出重定向到新文件中
command 1> filename    同上
command >> filename    把標準輸出追加到文件中
command 1>> filename 同上
command 2> filename    把錯誤輸出重定向到新文件中
command 2>> filename    把標準輸出追加到文件中
使用>重定向時,如果文件存在,則先刪除舊文件,再新建文件;>>則直接添加到原文件中

輸入重定向:
command < filename    以filename文件作爲標準輸入
command 0<filename    同上
command <<delimiter    從標準輸入中讀入,直到遇到delimiter分隔符

高級用法:
重定向綁定:
1.>/dev/null
這條命令的作用是將標準輸出1重定向到/dev/null中./dev/null代表linux的空設備文件,所有往這個文件寫入的內容都會丟失,
那麼執行了>/dev/null之後,標準輸出就會不再存在,沒有任何能夠找出輸出的內容
2.2>&1
採用&可以將兩個輸出綁定到一起.就是將錯誤輸出和標準輸出輸出到同一個地方.
3.>/dev/null 2>&1
就是將標準輸出重定向到空設備文件(丟棄標準輸出),錯誤輸出綁定到標準輸出中了,所以錯誤輸出也被丟棄了,既不會輸出到
屏幕,也不會輸出到文件中
4.>/dev/null 2>&1 和 2>&1 >/dev/null 
linux從左到右執行,所有2>&1 >/dev/null 的執行爲:
    1)2>&1,錯誤輸出綁定到標準輸出中,此時標準輸出是默認值,即輸出到屏幕上,所以錯誤輸出到屏幕上了
    2)>/dev/null,將標準輸出1重定向到/dev/null中,標準輸出被丟棄
5.爲什麼要綁定2>&1呢?不使用2>out 1>out重複輸出兩次?
重複輸出兩次,標準輸出和錯誤輸出會搶佔out文件的管道,可能導致信息寫入的錯誤,而且out文件被打開兩次,影響IO性能

nohup java -jar xxxx.jar >/dev/null 2>&1 &
不讓一些執行信息輸出到控制檯

nohup java -jar -server -Xms512M -Xmx512M -Xss256k -XX:NewSize=128M -XX:MaxNewSize=128M
 -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 
 -XX:+CMSClassUnloadingEnabled -XX:MaxTenuringThreshold=8 -XX:+CMSParallelRemarkEnabled 
 -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:MetaspaceSize=128m 
 -XX:MaxMetaspaceSize=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly 
 -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintGCDetails 
 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:gcc.log -Duser.timezone=Asia/Shanghai 
 -Djava.awt.headless=true xxx.jar >/dev/null 2>&1 &

 

參考鏈接:https://www.cnblogs.com/anyehome/p/9071619.html       --參數調優

               https://blog.csdn.net/lojze_ly/article/details/49456255      --新生代Eden與兩個Survivor區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章