赞
踩
- vmstat 1 3
- 代表每秒收集一次性能指标,总共获取3次
- procs
- r:等待运行的进程数
- b:处于非中断睡眠状态的进程数
- memory
- swpd:虚拟内存使用情况
- free:空闲的内存
- buff:用来作为缓冲的内存数
- cache:缓存大小
- swap
- si:从磁盘交换到内存的交换页数量
- so:从内存交换到磁盘的交换页数量
- io
- bi:发送到块设备的块数
- bo:从块设备接收到的块数
- system
- in:每秒中断数
- cs:每秒上下文切换次数
- cpu
- us:用户CPU使用时间
- sy:内核CPU系统使用时间
- id:空闲时间
- wa:等待I/O时间
- st:运行虚拟机窃取的时间
- pidstat -p 31759 -r 1 3
- 其中pidstat的参数-p用于指定进程ID,-r表示监控内存的使用情况,1表示每秒的意思,3则表示采样次数。
-
- Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页;
- Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页;
- VSZ:虚拟地址大小,虚拟内存使用KB;
- RSS:常驻集合大小,非交换区内存使用KB。
参数 -class:显示ClassLoad的相关信息; -compiler:显示JIT编译的相关信息; -gc:显示和gc相关的堆信息; -gccapacity:显示各个代的容量以及使用情况; -gcmetacapacity:显示Metaspace的大小; -gcnew:显示新生代信息; -gcnewcapacity:显示新生代大小和使用情况; -gcold:显示老年代和永久代的信息; -gcoldcapacity :显示老年代的大小; -gcutil:显示垃圾收集信息; -gccause:显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因; -printcompilation:输出JIT编译的方法信息。 例:jstat -gc 31759 S0C:年轻代中To Survivor的容量(单位KB); S1C:年轻代中From Survivor的容量(单位KB); S0U:年轻代中To Survivor目前已使用空间(单位KB); S1U:年轻代中From Survivor目前已使用空间(单位KB); EC:年轻代中Eden的容量(单位KB); EU:年轻代中Eden目前已使用空间(单位KB); OC:Old代的容量(单位KB); OU:Old代目前已使用空间(单位KB); MC:Metaspace的容量(单位KB); MU:Metaspace目前已使用空间(单位KB); YGC:从应用程序启动到采样时年轻代中gc次数; YGCT:从应用程序启动到采样时年轻代中gc所用时间(s); FGC:从应用程序启动到采样时old代(全gc)gc次数; FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s); GCT:从应用程序启动到采样时gc用的总时间(s)。
使用 在线线程分析
jstack -l 14096 >/mnt/data/thread.txt
- jmap -heap 31759
- #查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
- jmap -histo:live 31759 | more
- #导出并使用jvisualvm和mat分析
- jmap -dump:format=b,file=heap.hprof 31759
在线分析
- #开启参数
- -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gclogs
-
- 一个垃圾收集器在不同场景下表现出的性能也不一样,那么如何评价一个垃圾收集器的性能好坏呢?我们可以借助一些指标。
-
- 吞吐量:这里的吞吐量是指应用程序所花费的时间和系统总运行时间的比值。我们可以按照这个公式来计算GC的吞吐量:系统总运行时间=应用程序耗时+GC耗时。如果系统运行了100分钟,GC耗时1分钟,则系统吞吐量为99%。GC的吞吐量一般不能低于95%。
-
- 停顿时间:指垃圾收集器正在运行时,应用程序的暂停时间。对于串行回收器而言,停顿时间可能会比较长;而使用并发回收器,由于垃圾收集器和应用程序交替运行,程序的停顿时间就会变短,但其效率很可能不如独占垃圾收集器,系统的吞吐量也很可能会降低。
-
- 垃圾回收频率:多久发生一次指垃圾回收呢?通常垃圾回收的频率越低越好,增大堆内存空间可以有效降低垃圾回收发生的频率,但同时也意味着堆积的回收对象越多,最终也会增加回收时的停顿时间。所以我们只要适当地增大堆内存空间,保证正常的垃圾回收频率即可
示例一: no option 命令:jinfo pid 描述:输出当前 jvm 进程的全部参数和系统属性 示例二: -flag name 命令:jinfo -flag name pid 描述:输出对应名称的参数 使用该命令,可以查看指定的 jvm 参数的值。如:查看当前 jvm 进程是否开启打印 GC 日志。 例:jinfo -flag XX:PretenureSizeThreshold 16410 示例三:-flag [+|-]name 命令:jinfo -flag [+|-]name pid 描述:开启或者关闭对应名称的参数 使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。 例:jinfo -flag +PrintGC 5283 示例四:-flag name=value 命令:jinfo -flag name=value pid 描述:修改指定参数的值。 同示例三,但示例三主要是针对 boolean 值的参数设置的。如果是设置 value值,则需要使用 name=value 的形式。 示例五: -flags 命令:jinfo -flags pid 描述:输出全部的参数 示例六:-sysprops 命令:jinfo -sysprops pid 描述:输出当前 jvm 进行的全部的系统属性
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。