zoukankan      html  css  js  c++  java
  • java性能监控处理工具 夜雨星辰

    一常用工具命令学习

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

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

    ex:jps -l

    选项作用
    -q 只输出LVMID,省略主类名称
    -m 输出虚拟机启动时传递给主类main()函数参数
    -l 输出主类全名,如果进程执行的是jar包,输出jar路径
    v 输出虚拟机进程启动的JVM 参数

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

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

    jstat vmid interval count

    interval 查询间隔 count 查询次数

    ex:jstat -gc 19277 500 5  

    选项作用
    -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过高,内存过载问题

    1. 找到最高的CPU进程 top -c 
            如上图,最耗CPU的进程PID为19277
         2.找到最耗CPU线程 top -Hp 19277
            键入P 排序

            

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

           printf "%x\n" 19755

         4.查看堆栈信息  

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

        

    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<OOMObject> list = new ArrayList<OOMObject>();
    try {
    Thread.sleep(20000L);
      } catch (InterruptedException e) {
    e.printStackTrace();
      }
    while (true){
    list.add(new OOMObject());  
      }
       }
    }

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

    查看详情

    三.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

    1.8 MaxTenuringThreshold=1

    1.8 MaxTenuringThreshold=15

  • 相关阅读:
    背水一战 Windows 10 (61)
    背水一战 Windows 10 (60)
    背水一战 Windows 10 (59)
    背水一战 Windows 10 (58)
    背水一战 Windows 10 (57)
    背水一战 Windows 10 (56)
    背水一战 Windows 10 (55)
    背水一战 Windows 10 (54)
    背水一战 Windows 10 (53)
    背水一战 Windows 10 (52)
  • 原文地址:https://www.cnblogs.com/starjava/p/8674545.html
Copyright © 2011-2022 走看看