java运行时常见的参数
-XX:+PrintCommandLineFlags #查看当前用的是哪个垃圾回收器算法
-Xms512m #分配堆最小内存(初始堆大小),默认为物理内存的1/64,空余堆内存小于40%时,jvm就会增大堆内存大小直到xmx
-Xmx1024m #分配堆最大内存,默认为物理内存的1/4,默认空余堆内存大于70%,jvm就会减小堆内存大小直到xms
-Xss256k #每个线程的堆栈大小,jdk5.0后每个线程堆栈大小为1M,以前每个线程堆栈大小为256k,根据应用的线程所需内存
#大小进行调整.在相同物理内存下,减小该值能生成更多的线程,但是操作系统对一个进程的线程数一般限制在3000
#-5000左右. 一般小的应用可以设置为128k,大的建议设置为256k.
-Xmn1000m #设置年轻代大小,设置了这个 -xx:NewRatio 将失效
-XX:survivoRatio #两个survivo区和eden的比
-XX:NewRatio #设置新生代和老年代的比值 默认3 新生代 占三分之一 老年代 三分之二
-XX:MaxTenuringThreshold #控制新生代需要经历多少次GC晋升到老年代中的最大阈值
-XX:+UseSerialGC #:设置串行收集器 Serial + Serial Old
-XX:+UseParallelGC #:设置并行收集器 Parallel Scavenge + Serial Old
#从JDK7u4开始,就对 “-XX:+UseParallelGC” 默认的老年代收集器进行了改进,改进使得HotSpot VM在选择使用 “-XX:+UseParallelGC” 时,
#会默认开启 " -XX:+UseParallelOldGC “,也就是说默认的老年代收集器是 Parallel Old。
# 综上,JDK8中默认的选择是”-XX:+UseParallelGC",是 Parallel Scavenge + Parallel Old组合。
-XX:+UseParalledlOldGC # :设置并行年老代收集器 rallel Scavenge + Parallel Old
-XX:+UseConcMarkSweepGC #:设置并发收集器
-XX:+UseG1GC
-XX:+PrintGCDetails
-XX:+PrintHeapAtGC #打印GC前后的详细堆栈信息
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path #让JVM在遇到OutOfMemoryError时自动生成Dump文件
命令
jps
jps
#常用
jps -l
jps -v
#-q:不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。
#-mlvV:我们可以指定这些参数的任意组合。
#-m:显示Java虚拟机启动时传递给main()方法的参数。
#-l:显示主类的完整包名,如果进程执行的是JAR文件,也会显示JAR文件的完整路径。
#-v:显示Java虚拟机启动时传递的JVM参数。
#-V:不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。
#hostid:指定的远程主机,可以是ip地址和域名, 也可以指定具体协议,端口。如果不指定,则显示本机的Java虚拟机的进程信息。
#-help:显示jps命令的帮助信息。
jstack
jstack命令用于生成虚拟机当前时刻的线程快照。
#jstack [ option ] pid
#jstack [ option ] executable core
#jstack [ option ] [server-id@]remote-hostname-or-IP
#option 参数说明如下:
#-F 当正常输出的请求不被响应时,强制输出线程堆栈
#-m 如果调用到本地方法的话,可以显示C/C++的堆栈
#-l 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
Java语言定义了6种线程池状态:
- New:创建后尚未启动的线程处于这种状态,不会出现在Dump中。
- RUNNABLE:包括Running和Ready。线程开启start()方法,会进入该状态,在虚拟机内执行的。
- Waiting:无限的等待另一个线程的特定操作。
- Timed Waiting:有时限的等待另一个线程的特定操作。
- 阻塞(Blocked):在程序等待进入同步区域的时候,线程将进入这种状态,在等待监视器锁。
- 结束(Terminated):已终止线程的线程状态,线程已经结束执行。
Dump文件的线程状态一般其实就以下3种:
- RUNNABLE,线程处于执行中
- BLOCKED,线程被阻塞
- WAITING,线程正在等待
jmap
jmap的作用:
监控内存内的Java对象
语法
- jmap [option] (to connect to running process)
- jmap [option] <executable (to connect to a core file)
- jmap [option] [server_id@] (to connect to remote debug server)
选项说明
option:命令选项,常用选项如下:
- -heap: 打印Java堆概要信息,包括使用的GC算法、堆配置参数和各代中堆内存使用情况;
- -histo[:live]: 打印Java堆中对象直方图,通过该图可以获取每个class的对象数目,占用内存大小和类全名信息,带上:live,则只统计活着的对象;
- -permstat 打印永久代统计信息;
- -finalizerinfo 打印等待回收的对象信息
- -dump: 以hprof二进制格式将Java堆信息输出到文件内,该文件可以用MAT、VisualVM或jhat等工具查看;
dump-options选项:
- live 只输出活着的对象;不指定,则输出堆中所有对象
- format=b 指定输出格式为二进制
- file= 指定文件名及文件存储位置,例如:jmap -dump:live,format=b,file=D:\heap.bin
- -F 与-dump: 或-histo一起使用,当没有响应时,强制执行;注意:不支持live子选项
- pid: 进程id
######例: jmap -heap pid
jmap -heap pid
> jmap -heap 10352
jmap -heap 10352
Attaching to process ID 10352, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
//对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(defalut 40)
MinHeapFreeRatio = 0
//对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
MaxHeapFreeRatio = 100
//对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
MaxHeapSize = 4280287232 (4082.0MB)
//对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
NewSize = 89128960 (85.0MB)
//对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
MaxNewSize = 1426587648 (1360.5MB)
//对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老年代’的大小
OldSize = 179306496 (171.0MB)
//对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
NewRatio = 2
//对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
SurvivorRatio = 8
//对应jvm启动参数-XX:MetaspaceSize=<value>:设置JVM堆的‘元空间’的初始大小
// jdk1.8 永久代已经被元空间所取代
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
//对应jvm启动参数-XX:MaxMetaspaceSize= :设置JVM堆的‘元空间’的最大大小
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
//堆内存分布
Heap Usage:
//新生代的内存分布
PS Young Generation
//Eden区内存分布
Eden Space:
//Eden区总容量
capacity = 1425539072 (1359.5MB)
//Eden区已使用
used = 28510792 (27.19001007080078MB)
//Eden区剩余容量
free = 1397028280 (1332.3099899291992MB)
//Eden区使用比率
2.0000007407724003% used
From Space:
capacity = 524288 (0.5MB)
used = 65536 (0.0625MB)
free = 458752 (0.4375MB)
12.5% used
To Space:
capacity = 524288 (0.5MB)
used = 0 (0.0MB)
free = 524288 (0.5MB)
0.0% used
PS Old Generation
capacity = 128974848 (123.0MB)
used = 24006808 (22.894676208496094MB)
free = 104968040 (100.1053237915039MB)
18.613557893086256% used
13410 interned Strings occupying 1194568 bytes.