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

  • 相关阅读:
    html基础知识整理
    全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
    python简易版学生管理系统
    L2-024. 部落(并查集)
    python 飞机大战 实例
    Python3没有dict.has_key方法
    python学习-字符串 列表 元祖
    vim产生的.swap文件
    caffe 参数介绍 solver.prototxt
    ReentrantLock 实现原理
  • 原文地址:https://www.cnblogs.com/starjava/p/8674545.html
Copyright © 2011-2022 走看看