zoukankan      html  css  js  c++  java
  • Java 监控、分析、管理工具整理(包括 jps、jmap、jstack、jstat、jConsole、VisualVM)

    转载:https://blog.csdn.net/qingfanpeng/article/details/105015277

    jps
    用于列出java进程

    jps -q
    只输出进程ID,而不输出类的短名称
    jps-v
    可以显示传递给JVM的参数
    jps -V
    输出java进程的进程id和通过flag文件传入jvm的参数
    jps -l
    输出主函数的完整路径
    jps -m
    输出传递给Java进程(主函数)的参数
    jmap(Memory Map)
    作用
    用来查看堆内存使用状况,一般结合jhat使用
    检查一些严重影响性能的大对象的创建,检查系统中什么对象最多, 各种对象所占内存的大小等等
    一般在java开发的项目启动时候,最好加上下面命令,在内存溢出的时候可以通过日志查看信息。 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/java/dump
    主要参数
    -heap
    查看进程堆内存使用情况,包括使用的GC算法、 堆配置参数和各代中堆内存使用情况
    -dump
    生成 heapSnapshot
    -histo
    堆内存中的对象数目、大小统计直方图 等统计信息, 如果带上live则只统计活对象
    因为在dump:live前会进行full gc, 如果带上live则只统计活对象, 因此不加live的堆大小要大于加live堆的大小
    -F
    当 -dump 没有响应时,强制生成堆快照
    示例
    jmap -histo 9440 > c:s.txt
    PID为9440的Java应用程序的对象统计信息, 并输入到 s.txt 文件中
    jmap -dump:format=b,file=test.dump
    用jmap把进程内存使用情况dump到文件中

    jinfo
    作用
    查看正在运行的Java运行程序的扩展参数, 甚至支持在运行时修改部分参数
    Configuration info for java 虚拟机配置信息相关
    在很多情况下,Java应用程序不会指定所有的JVM参数。 而此时,开发人员可能不知道某一个具体的JVM参数的默认值。 有了 jinfo 工具,开发人员可以很方便地找到JVM参数的当前值。
    用法
    -flag: 打印指定java虚拟机的参数值
    -flag +< name >:设置指定java虚拟机参数的布尔值
    -flag -< name >:取消指定java虚拟机参数的布尔值
    -flag < name >=< value >:设置指定java虚拟机的参数的值
    并不是所有的JVM参数都是可以改的, 通过java -XX:+PrintFlagsFinal -version | grep manageable查看哪些可改
    示例
    jinfo pid
    前半段是系统的属性,后半段是jvm的参数
    jinfo -flag PrintGCDetails pid
    显示是否打印GC详细信息
    jinfo -flag MaxTenuringThreshold pid
    显示新生代对象晋升到老年代对象的最大年龄阈值(可配置)
    jinfo -flag +PrintGCDetails pid
    让 JCM打印GC详细信息

    jstat
    作用
    JVM Statistics Monitoring Tool,
    JVM统计监测工具
    jstat - [-t] [-h] [] []
    jstat -options 查看可用 options
    -class:显示ClassLoader的相关信息。
    -compiler:显示JIT编译的相关信息。
    -gc:显示与GC相关的堆信息。
    -gccapacity:显示各个代的容量及使用情况。 与-gc相比,它不仅输出了各个代的当前大小, 也包含了各个代的最大值和最小值
    -gccause:显示垃圾收集相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因。
    -gcnew:显示新生代信息。
    -gcnewcapacity:显示新生代大小与使用情况。
    -gcold:显示老年代与永久代的信息。
    -gcoldcapacity:显示老年代的大小。
    -gcmetacapacity:显示元空间的大小。(在java8之前是使用-gcpermcapacity显示永久代的大小)
    -gcutil:显示垃圾收集信息。
    -printcompilation:输出JIT编译的方法信息
    示例
    jstat -gc 21711 250 4
    输出的是GC信息,采样时间间隔为250ms,采样数为4
    jstat -class 21711 1000 2
    输出java进程 21711 的ClassLoader相关信息。每秒钟统计一次信息,一共输出2次

    jstack
    作用
    主要用来查看某个Java进程内的线程堆栈信息
    系统崩溃了
    如果java程序崩溃生成core文件,jstack工具可以用来获得 core文件的java stack和native stack的信息, 从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题
    系统hung住
    生成线程快照的主要目的是定位线程出现长时间停顿的原因, 如线程间死锁、死循环、请求外部资源导致的长时间等待等
    参数
    -F :
    当正常输出请求不被响应时,强制输出线程堆栈
    -l :
    除堆栈外,显示关于锁的附加信息
    示例
    jstack -l pid > jstack.log
    搜索关键字“BLOCKED”,定位到引起死锁的地方
    死循环需要配合Top命令一起使用, 死循环会导致CPU不断的飙升, 这时候使用top命令,查看cpu占用率较高的命令
    使用top -H -p 217711 查看进程中具体是那一条线程的CPU利用率高, 找到 21742 线程
    printf “%x ” 21742 得到 线程21742 的十六进制值为54ee
    jstack 21711 | grep 54ee
    输出进程 21711 的堆栈信息, 然后根据线程ID的十六进制值 grep,找出 54ee 线程

    jstatd
    一些监控工具也支持对远程计算机的监控(如:jps、jstat) 为了启用远程监控,则需要配合使用 jstatd(可以理解为 jstat deamon)工具

    hprof
    hprof不是独立的监控工具,它只是一个Java agent工具, 它可以用于监控Java应用程序在运行时的CPU信息和堆信息
    使用hprof工具可以查看程序中各个函数的CPU占用时间占比
    使用参数-agentlib:hprof=cpu=times,interval=10运行代码。 times选项将会在Java函数的调用前后记录函数的执行时间, 进而计算函数的执行时间

    三大在线分析工具
    https://gceasy.io/gc-index.jsp
    https://fastthread.io/
    https://heaphero.io/

    可视化监控工具
    JConsole
    Java Monitoring and ManagementConsole
    图形化 线程监控(可以理解为对应 jstack)、内存监控(对于 jmap)、类加载情况等
    如果需要使用JConsole连接远程进程, 则需要在远程Java应用程序启动时加一些参数
    VisualVM:
    可以认为jvisualvm是jconsole的升级版
    VisualVM基于NetBeans平台开发, 因此它一开始就具备了插件扩展的特性, 通过插件支持, VisualVM可以做许多事情:
    显示虚拟机进程和进程的配置、环境信息(jps、jinfo)
    监视应用程序的CPU、GC、堆、方法区及线程的信息(jstat、jstack)
    dump及分析堆转储快照(jmap、jhat)
    方法级的程序运行性能分析, 找出被调用最多、运行时间最长的方法
    离线程序快照: 收集程序的运行时配置、线程dump、内存dump等信息建立一个快照, 可以将快照发送开发者处进行bug反馈等等
    BTrace既可以作为visualVM的插件来使用, 也可以独立运行。 它能在不停止目标程序运行的前提下, 通过热部署技术加入原本并不存在的调试代码, 以实现对程序的动态调试, 如不需要重启服务,就可以新增日志
    JMC
    Java Mission Control
    mat
    MAT(Memory Analyzer Tool)工具是eclipse的一个插件(MAT也可以单独使用)
    GCViewer
    可视化分析 GC 日志
    开启GC 日志
    -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:./gc.log
    三月 21, 2020. Created by XMind
    ————————————————
    版权声明:本文为CSDN博主「qingfanpeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qingfanpeng/article/details/105015277

  • 相关阅读:
    Android仿人人客户端(v5.7.1)——个人主页(三)
    hdu2554-N对数的排列问题
    POJ1363:Rails
    golang printf
    HDU1200:To and Fro
    [C# 基础知识系列]专题六:泛型基础篇——为什么引入泛型
    poj 2480 (欧拉函数应用)
    Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
    爬虫推荐的工具
    python2 与 python3 语法区别--转
  • 原文地址:https://www.cnblogs.com/libin2015/p/14451321.html
Copyright © 2011-2022 走看看