Java 故障处理与性能监控工具

文章目录

  • 概述
  • 基础工具
    • jps
    • jstat
    • jinfo
    • jmap
    • jhat
    • jstack
  • 高级工具
    • VisualVM
      • VisualVM 的主要功能
    • Arthas
    • GC Easy

概述

在使用 Java 语言进行开发的过程中,我们很可能会遇到各种程序问题。
比如,可能会遇见程序突然就静止不动了,但是程序进程依然显示在后台进行;也可能会遇见程序莫名其妙地卡顿,甚至崩溃。当问题比较直观时,例如程序日志中明确地告诉你出现了一个 NPE 异常,出现在哪一行,那排查问题就会顺畅很多。
但是很多时候出现的问题可能没有那么直观,所以我们需要学习使用一些工具来排查问题,或者进行性能监控。

基础工具

基础工具,这里主要介绍由 JDK 自带的几个用于查看或追踪 Java 应用运行情况的命令行工具。

jps

jps,即 Java Process Status。从名字就可以看出,这是个与 Java 进程相关的的命令行工具。
这个命令用于列出正在运行的 Java 进程,并显示该进程中虚拟机执行的主类。例如:
在这里插入图片描述

可以看出,所有运行中的 Java 进程都被打印出来了,打印出来的信息中有两列,前一列是进程的 id,后一项是虚拟机执行的主类(运行 Main 方法的类)
jps 命令是一个非常常用,也是非常实用的命令,在后续介绍的工具中,基本都需要先使用 jps 命令获取对应程序的进程 id 后才能使用

jstat

jstat,即 JVM Statistics Monitoring Tool,是一个用于监控虚拟机各种运行信息的命令行工具。
它可以显示当前运行的 Java 进程中的内存使用情况、类加载数据、垃圾收集信息等实时运行数据,功能十分强大。
jstat 主要的参数有:

  • -class:显示当前类加载相关信息
  • -gc:显示当前虚拟机堆以及方法区的使用情况,以及垃圾收集相关的数据
    在这里插入图片描述

比较常用的是 -gc 参数,格式为:jstat -gc 进程 id。例如:

可以看出,指定的 Java 进程的垃圾收集相关信息都被打印了出来,在排查内存问题时比较常用

jinfo

jinfo,即 Configuration Info For Java,是一个用于查看和调整虚拟机各项参数的命令行工具。
它的功能主要分为以下几个部分:

  • 不指定参数时,查看所有参数的值
  • -flag 参数查看指定参数的值
  • -flags 参数查看未显式指定的参数对应的值(默认值)
  • JDK 6 以后,可以使用 -flag 参数动态修改部分参数值

使用的格式为:jinfo [option] 进程 id。例如:
在这里插入图片描述

可以看出,15848 这个进程的最大堆内存空间大小为 734003200 bit

jmap

jmap,即 Memory Map For Java,是一个用于生成堆转储快照(堆 dump 文件)的命令行工具。
通常情况下,当我们需要查看堆内各对象的存活情况时,就需要用到dump 文件。堆 dump 文件即触发堆转储那一刻的堆内使用情况快照,内部包含了各对象的存活情况及引用链等信息,对于问题定位有非常大的帮助。
获取堆 dump 文件我们也可以设置当出现 OOM 异常时,让虚拟机自动转储堆 dump 文件到指定目录。如果想要在虚拟机正常运行时获取堆 dump 文件,就需要用到 jmap 命令了。
jmap 命令除了获取堆 dump 文件之外,还可以查询 finalize 执行队列,当前使用垃圾收集器种类等信息。
jmap 命令的主要参数为:

  • -dump:生成堆 dump 文件
  • -heap:显示当前使用的垃圾收集器种类等信息

在日常开发过程中,用的比较多的还是生成堆 dump 文件,格式为 jmap -dump:format=b,file=文件位置 进程 id,例如:
在这里插入图片描述

可以看出,使用了 jmap -dump 后,在指定位置创建了堆 dump 文件

jhat

jhat,即 JVM Heap Analysis Tool,是一个用于分析堆 dump 文件的命令行工具。
当我们使用 jmap 获取了堆 dump 文件后,我们是不能直接打开查看文件的,因为里面是用特殊的文件格式来书写的,所以我们需要借助工具才能看得懂里面的内容。而 jhat 就是一个用于分析堆 dump 文件的工具。
用法也非常简单,格式为 jhat dump 文件的路径 即可,例如:
在这里插入图片描述

在使用了 jhat 命令后,它会创建一个 Web 服务,用于查看分析结果,例如图中提示我们在 7000 端口上启动了一个服务,我们打开 localhost:7000 查看的结果为:
在这里插入图片描述

可以看到,jhat 的分析结果在网页中就展示出来了,页面上的每个超链接都可以继续点击进去查看进一步的分析结果。
但是在实际应用中,jhat 是比较少用的,因为首先 jhat 的分析结果过于粗糙,难以提取有用的信息;其次 JDK 为我们提供了其他更好用的图形化界面用于分析并查看堆 dump 文件;最后,运行 jhat 命令比较占用系统资源,在堆文件比较大时可能会造成系统卡顿。

jstack

jstack,即 Stack Trace for Java,是一个用于生成虚拟机当前时刻的线程快照(threaddump 文件)的命令行工具。
线程快照,就是正在运行的 Java 线程内某一时刻每一个线程正在运行的方法的堆栈的集合。当正在运行的程序中出现某个请求迟迟不响应,或者说某个线程长时间停顿的情况时,可以使用 jstat 命令查看相关线程的当前执行堆栈情况来定位问题的原因。
常用的参数为:

  • 不使用任何参数时,将会打印这个进程内的所有 Java 线程的堆栈运行情况
  • -l 参数将会额外显示关于锁的相关信息
  • -m 参数将会把本地方法的执行堆栈也显示出来

比较常用的是 -l 参数,用法为 jstack -l 进程 id,例如:
在这里插入图片描述

可以看到,该命令把线程的堆栈信息都打印了出来,由于加了 -l 参数,还出现了锁相关信息 Locked ownable synchronizers 的内容

高级工具

高级工具,主要指的是多功能合一的,对于问题定位能力有极大提升的工具。这里主要介绍下面几款:

  • JDK 自带的 VisualVM
  • 阿里开源的 Arthas
  • 在线 GC 诊断工具 GC Easy

VisualVM

VisualVM ,官方名称为 All-in-One Java Troubleshooting Tool,是功能最强大的 Java 运行监控和故障处理程序之一。
从名称就可以看出,这肯定是一个多种功能合一的工具。事实也确实如此,它除了常规的运行监控与故障处理外,还提供了性能分析,扩展插件等功能。除此之外,jvisualvm 还有个非常大的优点:对于被监控的 Java 程序完全无侵入,不需要基于特殊的运行方式,或者定制化的 Agent 去运行。
VisualVM 的启动方式也很简单,只需要在命令行输入 jvisualvm 即可启动

VisualVM 的主要功能

VisualVM 的主要功能如下所示:

  • 显示当前系统上运行的所有 Java 进程与其环境信息(jpsjinfo 命令的功能)
  • 监控 Java 程序的垃圾收集相关信息,与堆、方法区的内存使用信息(jstat 命令的功能)
  • 监控 Java 程序当前所有线程的堆栈信息(jstack 命令的功能)
  • 创建堆 dump 文件,以及分析堆 dump 文件(jmapjhat 命令的功能)
  • 多维度(方法,线程)进行性能分析,可以找出各维度下耗时最长,性能最低下的数据条目
  • 其他扩展插件带来的功能,例如 Visual GC 插件,可以将堆内存的使用情况及 GC 过程通过可视化的界面展示出来

Arthas

Alibaba 开源的一个 JVM 监控工具,非常好用,可以在 linux 环境下运行后查看无图形化的图标界面

  • 可以通过 jad 命令反编译线上发布的代码,查看是否发布成功了
  • 可以通过 dashboard 命令,查看统计图表命令
  • 可以通过 thread 命令查看现在线程的所有状态,-b 参数查看是否有死锁的线程
  • 可以通过 ognl 命令查看系统线上变量的值,或者执行线上代码!!

如果线上是集群部署的应用,那么可以通过 zabbix 或者普罗米修斯等集群监控工具先定位到是哪台机器出了问题,然后再在这台机器上执行 arthas 相关命令。
官网地址为:Arthas

GC Easy

这是一款在线且收费GC 分析工具,可以通过上传 GC 日志文件,或者堆 dump 文件来给出调优意见,可以在完全不懂业务代码的情况下,根据这个工具提供的意见,进行 JVM 的参数调优,可以称作是傻瓜式的 JVM 调优工具。
官网地址为:GC Easy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM整合框架实现发送邮件功能

SSM整合框架实现发送邮件功能 1.导入发送邮件的依赖 <!-- 发送邮件jar包--><!--spring支持--><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.0.0.RELE…

ap接口 php_2018年小米高级 PHP 工程师面试题(模拟考试卷)

点击蓝字关注我们&#xff01;每天获取最新的编程小知识&#xff01;源 / php中文网 源 / www.php.cn在面试之前多看看有关公司的面试资料&#xff0c;对之后的面试会很有帮助。今天就给大家带来2018年小米高级 PHP 工程师面试题(模拟考试卷)&#xff0c;有着一定的参考价…

composer 设置版本号_Composer依赖管理 – PHP的利器

别再到处搜PHP类扩展包了&#xff0c;对于现代语言而言&#xff0c;包管理器基本上是标配。Java 有 Maven&#xff0c;Python 有 pip&#xff0c;Ruby 有 gem&#xff0c;Nodejs 有 npm。PHP 的则是 PEAR&#xff0c;不过 PEAR 坑不少&#xff1a;依赖处理容易出问题配置非常复…

SpringBoot2.5.4发送邮件4种方式

一.准备 在创建SpringBoot项目 二、选择依赖 选择依赖时 发现其选择依赖时有邮件发送与Springboot整合的jar包&#xff0c;我们勾选即可 如果未勾选也不要紧&#xff0c;咱们手动导入 <dependency><groupId>org.projectlombok</groupId><artifactId…

手游传奇刷元宝_传奇手游 平民制霸刀刀爆元宝!

新轩辕神途手游游戏介绍新轩辕神途是一款玩法种类十分丰富多样的神途手游&#xff0c;游戏内拥有放置挂机升级玩法&#xff0c;玩家不用浪费时间工作上学都能自动升级打宝&#xff0c;更有十分庞大的世界地图等你来探索&#xff0c;十分靠谱&#xff0c;更受欢迎&#xff0c;爆…

MySQL 逻辑架构与常用的存储引擎

文章目录概述逻辑架构示意图Server 层功能模块连接器查询缓存分析器优化器执行器存储引擎层InnoDBInnoDB 主要特性InnoDB 引擎下的查询过程MyISAMMyISAM 的主要特性MyISAM 引擎下的查询过程InnoDB 和 MyISAM 的对比概述 MySQL 是我们平时开发中最常用的关系型数据库&#xff0…

java 阿里云接口实现发送短信验证码

1.先去阿里云开通短信服务&#xff1a; 2.添加模板及签名&#xff1a;需要审核&#xff0c;个人账户审核就几分钟就OK 先解释一下模板及签名&#xff1a; 标准参照&#xff1a;https://help.aliyun.com/document_detail/55324.html?spm5176.sms-sign.0.0.765c1cbeNhvWBZ 去…

MySQL 索引底层数据结构实现

文章目录概述讨论范围查询数据结构查询数据结构种类及其高性能查询原理MySQL 索引的底层数据结构MySQL 索引的需求分析选择 MySQL 索引的底层数据结构B- 树和 B 树的对比MySQL 索引的底层数据结构揭秘概述 MySQL 的索引是存储引擎用于快速找到记录的一种数据结构&#xff0c;是…

Java面试——SpringMVC系列总结

文章目录&#xff1a; 1.什么是Spring MVC&#xff1f; 2.Spring MVC的主要组件有哪些&#xff1f; 3.请描述一下Spring MVC的工作流程&#xff1f; 4.MVC是什么&#xff1f;MVC设计模式的好处有哪些 5.拦截器Interceptor与过滤器Filter有什么区别&#xff1f; 6.Spring …

中蒙俄经济走廊背景_上海外国语大学师生代表团参观访问G60科创走廊俄罗斯院士创新基地...

10月23日&#xff0c;上海外国语大学团委书记、创新创业与实践教育学院执行院长廖文其、俄罗斯东欧中亚学院党总支副书记郝佳、辅导员石朝天及学生代表等一行15人参观访问G60科创走廊俄罗斯院士创新基地(下简称&#xff1a;创新基地)。创新基地主任赵磊、俄罗斯中小企业联合会华…

MySQL 索引类别与索引使用指南

文章目录概述MySQL 索引类型MySQL 索引方法BTREE 方法HASH 方法主键构成的索引结构主键索引的优点主键索引的缺点依赖顺序插入更新代价高索引使用指南索引树回顾索引树排序规则最左前缀法则最左前缀法则的产生依据最左前缀法则延申字段书写顺序不影响最左前缀法则最左前缀法则总…

测试员不可不知的几款bug管理工具

根据每个公司性质的不同&#xff0c;规模的不同&#xff0c;所用到的bug管理工具也可能不同。你们用的bug管理工具是什么呢&#xff1f;下面介绍几款主流的bug管理工具&#xff1a; 1. JIRA&#xff08;付费&#xff09; JIRA的生产者把JIRA定义为Professional Issue Tracker&…

Bugzilla 使用指南

本篇文章主要关注于如何高效合理的使用Bugzilla。 Bugzilla是一个开源的缺陷跟踪系统&#xff0c;它可以管理软件开发过程中缺陷的提交、修复、关闭等整个生命周期。 1. 基本概念 在Bugzilla中&#xff0c;Bug报告状态分为以下几种状态&#xff0c; 待确认的 unconfirmed 新…

MySQL explain 命令

概述 MySQL 的 explain 命令&#xff0c;主要用于查看实际查询过程中的一些执行细节&#xff08;执行计划&#xff09;&#xff0c;也是查看优化器决定如何执行查询的主要方法 explain 使用示例 explain 的使用也很简单&#xff0c;在 select 语句之前增加 explain 关键字再…

centos6.5安装bugzilla超详细教程

经过自己的摸索&#xff0c;与尝试&#xff0c;成功在centos6.5上&#xff0c;安装bugzilla。并且可以发送邮件。 一、安装软件 首先&#xff0c;需要安装一些软件 yum install mysql-devel -y yum install mysql-server -y yum install httpd -y yum install gcc gcc-…

从numpy里加载_PyTorch强化:01.PyTorch 数据加载和处理

PyTorch提供了许多工具来简化和希望数据加载&#xff0c;使代码更具可读性。1.下载安装包scikit-image&#xff1a;用于图像的IO和变换pandas&#xff1a;用于更容易地进行csv解析from __future__ import print_function, divisionimport osimport torchimport pandas as pd #用…

Redmine使用手册

一、Redmine简介 Redmine是基于ROR框架开发的一套跨平台项目管理系统&#xff0c;是项目管理系统的后起之秀&#xff0c;据说是源于Basecamp的ror版而来&#xff0c;支持多种数据库&#xff0c;除了和DotProject的功能大致相当外&#xff0c;还有不少自己独特的功能&#xff0…

swagger2maven依赖_Maven + SpringMVC项目集成Swagger

Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法&#xff0c;参数和模型紧密集成到服务器端的代码&#xff0c;允许API来始终保持同步。作用&#x…

IDEA2019版最新配置SVN及上传教程-超详细图文详解

IDEA2019版配置SVN图文详解 1. 查看svn仓库 调出svn视图&#xff1a; 连接svn服务器&#xff1a; 连接后效果如下&#xff1a; 补充:如果输入正确的连接地址后出现错误—系统找不到指定的文件 请到设置中检查(File | Settings | Version Control | Subversion)SVC客户端路径…

dubbo:reference、dubbo:service和@Service、@Reference使用情况

以前在同一模块中Spring依赖注入&#xff0c;可以通过Service和Autowired Dubbo是远程服务调用&#xff0c;消费方需要注入提供方定义的接口实例&#xff0c;可以通过xml配置 dubbo:reference、dubbo:service <dubbo:service interface"fei.CustomerServices" …