jdk一些命令使用说明
- jmap
jmap 查看给定进程、核心文件、远程调试服务器的共享对象内存映射和堆内存细节的工具,可查看堆使用情况、堆内对象直方图、加载类、生成堆快照等。
jmap -heap
可得到如下包含对象序号、某个对象示例数、当前对象所占内存的大小、当前对象的全限定名
jmap -histo
查看对象数最多的对象,并按降序排序输出:
jmap -histo |grep alibaba|sort -k 2 -g -r|less
查看占用内存最多的最象,并按降序排序输出:
jmap -histo |grep alibaba|sort -k 3 -g -r|less
jmap -dump:format=b,file=bzapp.hprof pid
加:live参数 dump 存活对象在队中的分布情况
jmap -dump:live,format=b,file=bzapp.hprof pid
jmap -dump:live,format=b,file=bzapp.bin pid
- jstack
jstack 查看 Java 进程内当前时刻的线程快照,也就是每条线程正在执行的方法栈情况,用于定位线程停顿、死锁等长时间等待的问题。
jstack -pid
jstack -l pid
jstack -l pid > stack.log
如果 -l 和 -m 都不起作用的时候,可以使用 java -F pid 强制 dump。
./jstack 243 | grep 1807 -A10
- jstat
jstat jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;
-class:统计class loader行为信息
-compile:统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不同的generations(包括新生区,老年区,permanent区)相应的heap容量情况
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件
-gcnew:统计gc时,新生代的情况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年区的情况
-gcoldcapacity:统计gc时,老年区heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
-gcutil:统计gc时,heap情况
jstat -gc 17970 2000 20 (每隔2秒监控一次,共20次)
jstat -gcutil 17970 1000 10 (按百分比显式)
jvm GC 参数
-Xms4g 初始堆大小4g,默认是物理内存的1/64,默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx4g 最大堆大小4g,物理内存的1/4,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-XX:NewSize=1g 设置年轻代大小=1g
-XX:MaxNewSize=2g 年轻代最大值2g
-Xss256k 每个线程的堆栈大小256k
-XX:NewRatio=2 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代), -XX:NewRatio=2表示年轻代与年老代所占比值为1:2,年轻代占整个堆栈的1/3
-XX:SurvivorRatio=8 Eden区与Survivor区的大小比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:MetaspaceSize=256m 元数据空间的初始大小256m,java8后才有,将永久代替换为元数据区
-XX:+DisableExplicitGC 关闭System.gc()
-XX:MaxTenuringThreshold=15 垃圾最大年龄,如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率
-XX:+UseParNewGC 设置年轻代为并行收集
-XX:ParallelGCThreads=8 并行收集器的线程数为8,此值最好配置与处理器数目相等
-XX:ConcGCThreads=8 CMS垃圾回收器并行线程线,推荐值为CPU核心数。
-XX:+UseConcMarkSweepGC 老年代使用CMS内存收集
-XX:+UseBiasedLocking 启用一个优化了的线程锁,对于高并发访问很重要 ,太多的请求忙不过来它自动优化,对于各自长短不一的请求,出现的阻塞、排队现象,他自己优化。
-XX:+CMSParallelRemarkEnabled 降低标记停顿
-XX:CMSInitiatingOccupancyFraction=70 使用cms作为垃圾回收,使用70%后开始CMS收集
-XX:+HeapDumpOnOutOfMemoryError 出现堆内存溢出时,自动导出堆内存 dump 快照
-XX:HeapDumpPath=logs 设置导出的堆内存快照的存放地址为logs
-XX:+PrintGC 输出简要GC日志,-XX:+PrintGC是一个实验的选项,建议使用-verbose:gc替代-XX:+PrintGC
-XX:+PrintGCDetails 输出详细GC日志
-Xloggc:gc.log 输出GC日志到文件,使用该配置也会默认开启-XX:+PrintGC -XX:+PrintGCTimeStamps
-XX:+PrintGCTimeStamps 输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-verbose:gc -verbose:gc是 -XX:+PrintGC一个别称 -verbose:gc是一个标准的选项, -XX:+PrintGC是一个实验的选项,建议使用-verbose:gc替代-XX:+PrintGC
-XX:+PrintReferenceGC 打印年轻代各个引用的数量以及时长
-XX:+PrintGCApplicationStoppedTime # 打印 stop world 的时间
-XX:+PrintGCApplicationConcurrentTime # 打印程序未中断运行的时间
-XX:+PrintTenuringDistribution # 打印每次 minor GC 后新的存活周期的阈值