JVMパラメータ設定

9082 ワード

一、パラメータ表示方法
1.標準的なパラメータ(-)、すべてのJVM実装はこれらのパラメータの機能を実現しなければならなくて、しかも後方互換性
2.非標準パラメータ(-X)は、デフォルトのjvmではこれらのパラメータの機能を実現しますが、すべてのjvm実装が満たされることは保証されず、後方互換性は保証されません.
3.非Stableパラメータ(-XX)このようなパラメータは、jvm実装ごとに異なるため、将来的には随時キャンセルされる可能性があり、慎重に使用する必要がある(ただし、これらのパラメータは非常に有用であることが多い)
二、標準パラメータ
実は標準パラメータはJavaを使ったことがある人が最もよく知っているのは、javaコマンドを実行するときに追加したパラメータです.java-version、java-jarなど、コマンドjava-helpやjava-?現在のマシンのjavaのすべての標準パラメータのリストを取得できます.
1. -client
1)  jvm  client  ,     pc        ,    ,             ;       

2. -server
1)  server  ,       ( client   10%  ),             ,      ,      、             ;

2)      -server -client,JVM                    ,     server    ,64  JVM  server  ,      -client  

3. -DpropertyName=value
1)          ,        ,  value   ,   -Dname=”space string”        , System.getProperty(“propertyName”)            ,        System.setProperty(“propertyName”,”value”)        

4.-verbose(GCの問題を問い合わせる最も一般的なコマンドの1つです.具体的なパラメータは以下のとおりです.)
1)-verbose:class		  jvm        , jvm                   

2)-verbose:gc            GC     ,          

3)-verbose:jni		  native         ,      jni      

三、非標準パラメータ
非標準パラメータは、標準パラメータに基づいて拡張されたパラメータで、「java-X」コマンドを入力すると、現在のJVMでサポートされているすべての非標準パラメータのリストを得ることができます(実際には多くありませんよ)
1. -Xms
1)      ,         ,           /64(   1G)

2)     ,         40%(      -XX: MinHeapFreeRatio   , -X:MinHeapFreeRatio=30) ,        ,     -Xmx   

2. -Xmx
1)     ,           /64(   1G),  Xms Xmx    ,        

2)     ,         70%(      -XX: MaxHeapFreeRatio   , -X:MaxHeapFreeRatio=60) ,        ,     -Xms   		

3)      =     +     ,            ,        ,         ,             /     =2/1  (  -XX:NewRatio    -XX:NewRatio=5,     /   =5/1)

4)            Xms Xmx          ,         ,Xms Xmx        ,        ——    

3. -Xmn
1)           ,  E    S    ,     :-Xmn65535,-Xmn1024k,-Xmn512m,-Xmn1g (-Xms,-Xmx     )

2)-Xmn     JDK1.4       ,(   1.3/1.4   ,   -XX:NewSize       , -XX:MaxNewSize        )

4. -Xss
1)                ,  1M,          	

2)      ,       ,          -XX:ThreadStackSize,      1.6  ,        ,    ;1.6    ,-Xss     ,  -Xss  ,-XXThreadStackSize     ,     -Xss  ,     -XX:ThreadStackSize  

5. -Xprof
1)        ,             ;         

6. -Xnoclassgc
1)	    class gc  ;         ,       OutOfMemoryError  ,  

7. -Xincgc
1)    gc(     );         GC          ;              ,     CPU        

8. -Xloggc:file
1) -verbose:gc    ,     GC               ,          ,          。

2)  verbose           ,  -Xloggc  	

四、非Stableパラメータ(非静的パラメータ)
-Xで表される非Stableパラメータは、公式文書では不確定で丈夫ではなく、各社の実装にもそれぞれ異なりますが、非常に実用的な場合が多いため、このパラメータはGCにとって非常に重要です
1.分類
1)    ( Performance Options):  JVM            ,           ;

2)    (Behavioral Options):    JVM     , GC         ;

3)    (Debugging Options):    、  、   jvm  ,    jvm       ;

2.使用方法
1)-XX:+

3.一般的なパフォーマンス・パラメータ(パフォーマンス・パラメータは、動作パラメータとデバッグ・パラメータと比較して、パフォーマンス・パラメータの後に数値が付くことが多いメモリ割当てのサイズと割合を定義するために使用されることが多い)
1)-XX:NewSize=2.125m 						                

2)-XX:MaxNewSize=size                                    

3)-XX:PermSize=64m                                   

4)-XX:MaxPermSize=64m 						            (    )

5)-XX:MaxTenuringThreshold=15                            (   MinorGC   ,      ,     1),          

6)-XX:NewRatio=n                                      。 : 3,            1:3,              1/4,   2

7)-XX:SurvivorRatio=n                         Eden    Survivor    。  Survivor    。 :3,  Eden:Survivor=3:2,  Survivor        1/5,   8
   
8)XX:MaxHeapFreeRatio=70                   GC java           ,    ,       

9)-XX:MinHeapFreeRatio=40                  GC java           ,    ,       

10)-XX:ThreadStackSize=512                        ,  0        

11)-XX:PretenureSizeThreshold= size                       (        )

4.一般的な動作パラメータ(主にどのようなゴミ収集器の組み合わせを使用するか、運転中のGCポリシーを制御するなど)
1)-XX:-UseSerialGC                     	    GC,   Serial+Serial Old  

2)-XX:-UseParallelGC                           GC,   Parallel Scavenge+Serial Old     (-Server        )

3)-XX:GCTimeRatio=99                                      (   99, 1%     GC)

4)-XX:MaxGCPauseMillis=time                  GC       (      Parallel Scavenge  )

5)-XX:+UseParNewGC                           ParNew+Serial Old     

6)-XX:ParallelGCThreads                                , +UseParNewGC      

7)-XX:+UseParallelOldGC                      Parallel Scavenge +Parallel Old     

8)-XX:+UseConcMarkSweepGC	                  ParNew+CMS+Serial Old      ,    ParNew+CMS,          ,      Serial Old  

9)-XX:-DisableExplicitGC                       System.gc(); jvm gc    

10)-XX:+ScavengeBeforeFullGC                  GC   Full GC  

5.一般的なデバッグパラメータ(主にGCの情報の監視と印刷に使用)
1)-XX:-CITime								     JIT     

2)-XX:ErrorFile=./hs_err_pid.log                    

3)-XX:HeapDumpPath=./java_pid.hprof	               

4)-XX:-HeapDumpOnOutOfMemoryError               OOM           

5)-XX:-PrintCommandLineFlags	                         

6)-XX:+PrintCompilation                                   

7)-XX:+PrintGC                               GC       

8)-XX:+PrintGC Details                       GC       

9)-XX:+PrintGCTimeStamps                       GC    

10)-XX:+TraceClassLoading                          

11)-XX:+TraceClassLoadingPreorder                         

12)XX:+TraceClassResolution                     

13)-XX:+TraceClassUnloading                        

14)-XX:+TraceLoaderConstraints                          

15)-XX:+PrintHeapAtGC                         GC          

五、監視ツールと方法
1.GCを監視することで、多くの問題を明らかにすることができます.
1)minor GC full GC   ;

2)    GC      ;

3)                       

4)  GC ,      (Stop the world)   

5)  GC     ,     

2.コマンドラインツール(オリジナル)
1)jps(実行中のJVMプロセスを問い合わせるため、コマンド形式:jps[option][hostid])
(1) -q                          LVMID,       

(2) -m                                     main()     

(3) -l                               ,        Jar ,  Jar  

(4) -v                                 JVM  

2)jstat(jstatは、ローカルまたはリモートJVMプロセスにおけるクラスマウント、メモリ、ゴミ収集、JITコンパイルなどのデータをリアルタイムで表示することができる(リモートJVM情報を表示するには、リモートホストがRMIサポートをオンにする必要がある)
(1) -class                        、    、             

(2) -gc	                       Java   ,  Eden 、  Survivor 、   、       ,    、GC       

(3) -gccapacity                   -gc    ,       java                

(4) -gcutil                       -gc    ,                    

(5) -gccause                  -gcutil    ,            GC     

(6) -compiler                  JIT         、     

  : jstat -gc 3463

3)jinfo(現在実行中のJVM属性とパラメータの値を問い合わせる)
(1)-flag                 	                   

(2)-flag [+|-]name           -flag name=value:       

(3)-sysprops                        System.getProperties()

  :jinfo -sysprops 3463

4)jmap(現在使用されているコレクタ、現在のスペース使用率など、現在のJavaスタックと永続世代の詳細を表示するためのもの)
(1)-dump                      java     

(2)-heap                      java     (  Linux/Solaris   )

(3)-F                              -dump       ,           dump  (  Linux/Solaris   )

(4)-histo                             

(5)-permstat                 ClassLoader              (  Linux/Solaris   )

  :jmap -dump 3463

5)jhat(jmapで生成されたdumpファイルを解析するためのJDK独自のツール)
(1)     : jhat -J -Xmx512m [file],  jhat  mat  ,    mat(Eclipse  : http://www.eclipse.org/mat ),mat    ,       

6)jstack(現在のJVMのすべてのスレッドスナップショットを生成するために使用されます.スレッドスナップショットは、仮想マシンの各スレッドが実行中の方法であり、スレッドが長時間停止している理由を特定するために使用されます)
(1)-F 					                ,        

(2)-l                            ,          

(3)-m                                   ,    C/C++   

3.ビジュアル化ツール
1)Jconsole						   JDK            

2)Visual VM                                           ,  OQL 

3)MAT                               eclipse     ,   Java      ,                    。  OQL

4)NetBeans Profiler                           CPU、           ,           JVM          。                       

5)jmeter                              ,    

参考サイト
JVMモニタリングとチューニング
Javaパフォーマンス最適化の9大ツール
注:文章は他の文章を参考にして自分で整理したもので、一部の参考になるかもしれないし、大部分の参考になるかもしれないが、決して直接転載するわけではない.権利侵害したら削除すると思う.私はこれを自分のノートに使うだけだ.ついでに知識を整理すると同時に、一部の人を助けることができる.ps:間違いがあったら、皆さんのご指摘をお願いします.弟さんは感謝に堪えません.