java 监控工具_java性能监控处理工具

一常用工具命令学习

1.Jps 虚拟机进程状况工具

功能:和UNIXPS 命令近似,列出正在运行的虚拟机进程,显示虚拟机运行主类和本地虚拟机唯一进程ID (LVMID)

ex:jps -l

c7bb598689ba5be9484f0d113965e987.png

选项作用

-q

只输出LVMID,省略主类名称

-m

输出虚拟机启动时传递给主类main()函数参数

-l

输出主类全名,如果进程执行的是jar包,输出jar路径

v

输出虚拟机进程启动的JVM 参数

2.jstat 虚拟机统计信息监控工具

功能:监控虚拟机各种运行状态的工具,可以显示本地或者远程的虚拟机进程中的类装载、内存、垃圾收集、JIT编译等数据

jstat vmid interval count

interval 查询间隔 count 查询次数

ex:jstat -gc 19277 500 5

4c7f426d0b464f22dce4269bb3e0c84b.png

选项作用

-class

监控类加载、卸载数量、总空间以及类装载所耗费的时间

-gc

监控java堆情况,包括Eden区,两个survivor区,老年代,永久代等使用量、已用空间和耗时时间

-gcutil

监控内容与-gc基本相同,以百分比的形式标注使用空间和总量

-gccause

与-gcutil功能一致,附带最后一次GC的原因

......

3.jinfo java配置信息工具

实时查看调整虚拟机各项参数

java -XX:+PrintCommandLineFlags -version

4.jmap java内存映像工具

功能:用于生成堆转储快照(heapdump或dump文件),查询finalize执行队列,Java堆和永久代详细信息(空间使用率,哪种收集器)。

选项作用

-dump

生成堆转储快照。格式:-dump:format=b,file=xx

-finalizerinfo

显示F-Queue中等待Finalizer线程执行finalize方法的对象

-heap

显示堆详细信息,使用哪种回收期、参数配置、分代情况等

-histo

显示堆中对象统计信息,包括类、实例数量、合计容量

-F

-dump没反应,强制生成堆快照

jmap -dump:format=b,file=demo.bin 3500

jmap -histo:live 22583 | head -10

5.jhat 堆分析工具 (eclipse的mat更强大)

功能;内置小型HTTP服务,生成dump文件的分析结果可在web页面分析

jhat demo.bin

6:jstack java堆栈跟踪工具

功能:生成当前时刻的线程快照,线程快照是当前虚拟机当前每一条线程执行的方法堆栈集合,生成快照主要为了定为线程执行时间过长的原因。

jstack vmid

选项命令

-F

强制输出堆栈信息

-l

除了堆栈,显示关于锁的信息

-m

调用本地方法,可以显示C/C++堆栈

二.线上故障案例分析

1.服务器部署若干服务,CPU报警。如何定位CPU过高,内存过载问题

找到最高的CPU进程 top -c

image2018-3-27%2017%3A4%3A53.png?version=1&modificationDate=1522141494000&api=v2

如上图,最耗CPU的进程PID为19277

2.找到最耗CPU线程 top -Hp 19277

键入P 排序

image2018-3-27%2017%3A5%3A20.png?version=1&modificationDate=1522141521000&api=v2

3.将线程PID转化为16进制

printf "%x\n" 19755

4.查看堆栈信息

jstack 19277 |grep '4d2b' -C5 --color

image2018-3-27%2017%3A4%3A20.png?version=1&modificationDate=1522141460000&api=v2

2.定位内存溢出,OutOfMemeryError异常问题

模拟内存溢出demo

-verbose:gc -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/yangtuo/dump

package com.yangtuo.jvm;

import java.util.ArrayList;

import java.util.List;

public class HeapOOM {

static class OOMObject{

}

public static void main(String args[]) {

List list = new ArrayList();

try {

Thread.sleep(20000L);

} catch (InterruptedException e) {

e.printStackTrace();

}

while (true){

list.add(new OOMObject());

}

}

}

MAT 分析dump文件 ,对象占用内存比例判断出存在大对象

image2018-3-27%2017%3A39%3A6.png?version=1&modificationDate=1522143548000&api=v2

查看详情

image2018-3-27%2017%3A41%3A50.png?version=1&modificationDate=1522143711000&api=v2

image2018-3-27%2017%3A43%3A34.png?version=1&modificationDate=1522143815000&api=v2

三.JVM 参数调优

-Xms -Xmx -Xmn -Xss

1.尽可能让对象留在年轻代

2.大对象直接进入老年代

-XX:PretenureSizeThreshold 3M  大于这个数直接在老年代分配

3.长期存活对象直接进入老年代

Minor GC后仍然存活并进入suvivor区,每次GC年龄+1

设置GC进入老年代的阀值 -XX:MaxTenuringThreshold=1

默认-XX:MaxTenuringThreshold=15

验证jdk8和jdk7 结果不一致

1.7

bea2f88f6da1420078ad982bd64caca0.png

13a4893b2f4711cb22a04c25aff5b3e4.png

1.8 MaxTenuringThreshold=1

413cba96565229d2ff7495c3108940a8.png

1.8 MaxTenuringThreshold=15

62be34100b891e5c625af2b5ed33f4a7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值