一、标准参数
使用所有版本
-version
-help
-server
-cp
>java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
二、非标准参数
1、-X参数
源码文件 >类文件 > 前端编译
-Xint 解释执行
-Xcomp 第一次使用就编译成本地代码
-Xmixed 混合模式,JVM自己来决定
2、-XX参数
使用得最多的参数类型 非标准化参数,相对不稳定,主要用于JVM调优和Debug
针对一个进程而言
-XX:name=value 表示对某个参数进行赋值
-XX:+/-name 启用或者禁用
比如:
-XX:+UseConcMarkSweepGC
表示启用CMS类型的垃圾回收器
-XX:+UseG1GC
表示启用G1类型的垃圾回收器
-XX:InitialHeapSize=1000M
表示初始化堆内存大小
-XX:MaxHeapSize=1000M
表示最大堆内存大小
-Xms1000M
等价于-XX:InitialHeapSize=1000M
-Xmx1000M
等价于-XX:MaxHeapSize=1000M
-Xss100
等价于-XX:ThreadStackSize=100
3、查看JAVA进程中有哪些参数:
jps 查看JAVA线程
java-XX:+PrintFlagsFinal -version
查看参数是否使用 例子 :jinfo -flag UserG1GC 进程号
4、怎么设置JVM参数
idea、eclipse 运行
jar包的时候:java -jar -XX:InitialHeapSize=1000M
一般中间件比如:tomcat
WINDOW:catalina.bat
Liunx:catalina.sh
当程序跑起来的时候,还想调整怎么办:jinfo可以实时修改jvm参数的值。必须后面的标记是manageable。
5、JDK常用命令
1、jps查看当前JAVA进程 jps -l详情信息
2、jinfo 查看参数
jinfo -flag PID :罗列出赋值修改过的值
3、jstat:java面向对象 类被加载到虚拟机中
类装载信息 jastat -class Pid
垃圾回收 jstat -gc PID
4、jstack:java进程线程的情况
jstack PID
应用程序发生死锁可以看到
5、jmap:生成堆存储的快照,堆当中的详情
jmap -heap pid
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = heap.hprof//发生om自动导出
三、常用工具
某种意义上是对命令的封装
1、JDK自带
jvisualvm:在上一章JVM垃圾回收原理理解分享(二)
jconsole:JConsole工具是JDK自带的可视化监控工具。查看java应用程序的运行概况、监控堆信息、永久区使用
情况、类加载情况等。
2、第三方
arthas
arthas 下载地址
下载安装
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
or
java -jar arthas-boot.jar -h # 然后可以选择一个Java进程
3、内存分析
获取报错日志文件
jmap -dump:format=b,file=heap.hprof 44808
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
MAT
下载地址
Java堆分析器,用于查找内存泄漏 Heap Dump,称为堆转储文件,是Java进程在某个时间内的快照。
它在触发快照的时候保存了很多信息:Java对象和类信息。 通常在写Heap Dump文件前会触发一次Full GC。
heaphero(在线工具)
地址
perfma(在线工具)
地址
4、GC日志分析
要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下,根据前面参数的学习,下
面的配置很容易看懂。比如打开windows中的catalina.bat,在第一行加上
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:$CATALINA_HOME/logs/gc.log
例如
2019-06-10T23:21:53.305+0800: 1.303: [GC (Allocation Failure)[PSYoungGen: 65536K[Young区回收前]-10748KYoung区回收后] 65536K[整个 堆回收前]->15039K整个堆回收后, 0.0113277 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
留意:回收钱回收后怎么yong区大小不同:是old区释放的空间。
1、本地工具GCViewer
java -jar gcviewer-1.36-SNAPSHOT.jar
2、gceasy(在线工具)
地址
3、gcplot
地址