JVMのチューニング(A) - クエリパラメータとトラブルシューティング

JVMパラメータの種類

標準的なパラメータ

  • -助けて
  • -server -client
  • -version -showversion
  • -cp -classpath

X-パラメータ

  • -Xint:解釈
  • -Xcomp:初めてのネイティブコードにコンパイル
  • -Xmixed:混合モードは、JVMは、ネイティブコードにコンパイルされたか否かを判断します

XXパラメータ

機能

  • 非標準化パラメータ
  • 比較的不安定
  • 主にチューニングし、JVMのデバッグのために

分類

  • ブールタイプ

    格式:-XX:[+-]<name>表示启用或禁用name属性
    比如:
    -XX:+UseConcMarkSweepGC
    -XX:+UseG1GC
  • 非ブール型の

    格式:-XX:<name>=<value> 表示name属性的值是value
    比如:
    -XX:MaxGCPauseMilis=500
    XX:GCTimeRatio=19

  • -XXに相当-Xms:InitialHeapSizeは//ヒープサイズを初期化します
  • -XXに相当-Xms:MaxHeapSize //最大ヒープサイズ

JVMの実行時パラメータの表示

-XX:+PrintFlagsInitial   //查看初始值
-XX:+PrintFlagsFinal   //查看最终的值
-XX:+UnlockExperimentalVMOptions   //解锁实验参数
-XX:+UnlockDiagnosticVMOptions  //解锁诊断参数
-XX:+PrintCommandLineFlags  //打印命令行参数

PrintFlagsFinal

1569671403867

1569671560784

=デフォルトを示します

:ユーザーまたはユーザーJVMによって改変=値

JPS

Linuxのpsのと同様の図のJavaプロセス、

1569671892159

Jinfoの

jinfo -flag MaxHeapSize xxxx(进程号)   //查看最大堆内存

1569671942784

jinfo -flag UseConcMarkSweepGC xxx(进程号)     //查看是否使用了这个GC
jinfo -flag UseG1GC xxx(进程号)    //是否使用了G1回收器
jinfo -flag UseParallelGC xxx(进程号)  //是否使用了并行回收器 

1569672105632

JSTATビュー仮想マシンの統計

フォーマット:

options:-class,-compiler,-gc,-printcompilation

クラスローダ

ビュークラスローダ情報:

jstat -class xxx(进程号)

1569673720935

说明:
3176(进程号)
1000(1000毫秒,没隔1秒)
10(一共输出10次)
3176这个进程,没隔1s输出一次,一共输出10次

ガーベジコレクション

-gc / -gcutil / -gccause / -gcnew / -gccold

-gc出力

S0C / S1C / S0U / S1U:S0とS1との合計量

EC / EU:総面積とエデンの量

OC / OU:旧地区の総量

MC / MU:総量領域メタスペース

CCSC / CCSU:スペースの総量の圧縮

YGC / YGCT:youngGCの数と時間

FGC / FGCT:FullGCの数と時間

GCT:総GC時間

使用

jstat -gc xxx(进程号) 1000 10   //动态输出,没隔1s输出一次,一共输出10次

JITコンパイラ

ビューJITコンパイラ情報

jstat -compiler PID
jstat -printcompilation PID

jmapの+ MAT戦闘メモリオーバーフロー

JVMのメモリ構造

1569675319637

メモリマップドファイルをエクスポートする方法

メモリオーバーフローが自動的にエクスポート

设置两个参数:
-XX:+HeapDumpOnOutOfMemoryError     //开启功能
-XX:HeapDumpPath=./     //导出到什么路径

手動jmapのをエクスポートするコマンドを使用します

jmap -dump:format=b,file=help.hprof
format=b 导出的格式是二进制的文件

メモリのオーバーフローのMAT分析

  • ダウンロードMATツール
  • 分析用のマットにエクスポートした画像ファイル

デッドロックとjstack実際の無限ループ

スレッドの状態:

1、新しいです

2、ランニング

3、ブロックされました

4、待っています

5、TIMED_WAITING

6、終了

高いCPU彪もたらす実際の無限ループ

  • ビューのCPU負荷:
top //查看laod average,发现cpu非常高;
  • トップリスト中のCPU使用率が高いプロセスを探します
  • 情報のプロセスをxxx.txtファイルへjstack PID> xxx.txt、プリントjstack
  • 分析のための占有スレッドを処理するための内部リソース:
top -p PID -H   #查看某个进程内部线程占用情况

5つのスレッドは、CPUが非常に高い占有が見つかりました:

1569714766323

  • 図アウトPID(10進数)進変換の分析:
printf "%x" 8247
2037
  • jstack情報の輸出のステップの前に文書では、進PIDの変換の最後のステップを探し出します

    2037:0x2037は16進数を表します

    うち検索した後、あなたはスタック情報のスレッドを見ることができます

    1569715297769

実際のCPUが舞い上がる原因デッドロック

  • ViewプロジェクトのプロセスID

    ps -ef | grep tomcat
  • 情報のプロセスをxxx.txtファイルへjstack PID> xxx.txt、プリントjstack
  • テキストの終わりを引っ張ります

1569716077324

分析ツールは、正確にデッドロックと場所の存在下でプロジェクトを見つけることができます

おすすめ

転載: www.cnblogs.com/xujie09/p/jvm.html