Java问题诊断和排查工具

news2024/10/7 14:32:42

文章目录

  • 一、前言
  • 二、Java问题诊断和排查工具
    • 1、JDK自带工具
    • 2、常用命令
    • 3、JAVA Dump:
      • 3.1、jps
      • 3.2、jstack
      • 3.3、jmap
        • 3.3.1、jmap -heap pid:查看堆使用情况
        • 3.3.2、jmap -histo pid:查看堆中对象数量和大小
        • 3.3.3、jmap -dump:format=b,file=heapdump pid:将内存使用的详细情况输出到文件
      • 3.4、jstat
  • 三、总结

一、前言

在数字世界中,Java作为一种流行的编程语言,广泛应用于开发各种类型的应用程序。然而,在开发过程中,不可避免地会出现各种问题。本文将探讨一些用于诊断和排查Java问题的工具。

二、Java问题诊断和排查工具

1、JDK自带工具

在JDK的bin目录下有很多命令行工具:在这里插入图片描述
可以看到各个工具的大小基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是 jdk\lib\tools.jar 类库的一层薄包装而已,他们的主要功能代码是在tools类库中实现的。

命令行工具的好处是:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程telnet到服务器上都会受到限制。而借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能。

2、常用命令

在这里插入图片描述
1、jps:查看本机java进程信息

2、jstack:打印线程的栈信息,制作 线程dump文件

3、jmap:打印内存映射信息,制作 堆dump文件

4、jstat:性能监控工具

5、jhat:内存分析工具,用于解析堆dump文件并以适合人阅读的方式展示出来

6、jconsole:简易的JVM可视化工具

7、jvisualvm:功能更强大的JVM可视化工具

8、javap:查看字节码

3、JAVA Dump:

JAVA Dump就是虚拟机运行时的快照,将虚拟机运行时的状态和信息保存到文件中,包括:

线程dump:包含所有线程的运行状态,纯文本格式

堆dump:包含所有堆对象的状态,二进制格式

3.1、jps

显示当前所有java进程pid的命令,我们可以通过这个命令来查看到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),不过jps有个缺点是只能显示当前用户的进程id,要显示其他用户的还只能用linux的ps命令。
在这里插入图片描述

执行jps命令,会列出所有正在运行的java进程,其中jps命令也是一个java程序。前面的数字就是进程的id,这个id的作用非常大,后面会有相关介绍。

jps -help:
在这里插入图片描述
jps -l 输出应用程序main.class的完整package名或者应用程序jar文件完整路径名

在这里插入图片描述

jps -v 输出传递给JVM的参数

在这里插入图片描述

jps失效

我们在定位问题过程会遇到这样一种情况,用jps查看不到进程id,用ps -ef | grep java却能看到启动的java进程。

要解释这种现象,先来了解下jps的实现机制:

java程序启动后,会在目录/tmp/hsperfdata_{userName}/下生成几个文件,文件名就是java进程的pid,因此jps列出进程id就是把这个目录下的文件名列一下而已,至于系统参数,则是读取文件中的内容。

我们来思考下:如果由于磁盘满了,无法创建这些文件,或者用户对这些文件没有读的权限。又或者因为某种原因这些文件或者目录被清除,出现以上这些情况,就会导致jps命令失效。

如果jps命令失效,而我们又要获取pid,还可以使用以下两种方法:

1、top | grep java
2、ps -ef |grep java

3.2、jstack

主要用于生成指定进程当前时刻的线程快照,线程快照是当前java虚拟机每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致长时间等待。
在这里插入图片描述

3.3、jmap

主要用于打印指定java进程的共享对象内存映射或堆内存细节。

堆Dump是反映堆使用情况的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。一般在内存不足,GC异常等情况下,我们会去怀疑内存泄漏,这个时候就会去打印堆Dump。

3.3.1、jmap -heap pid:查看堆使用情况

在这里插入图片描述

3.3.2、jmap -histo pid:查看堆中对象数量和大小

在这里插入图片描述
打印的信息分别是:序列号、对象的数量、这些对象的内存占用大小、这些对象所属的类的全限定名

如果是内部类,类名的开头会加上*,如果加上live子参数的话,如jmap -histo:live pid,这个命名会触发一次FUll GC,只统计存活对象

3.3.3、jmap -dump:format=b,file=heapdump pid:将内存使用的详细情况输出到文件

然后使用jhat命令查看该文件:jhat -port 4000 文件名 ,在浏览器中访问http:localhost:4000/

3.4、jstat

jstat是一个用于监控Java虚拟机(JVM)性能的命令行工具。它可以提供关于Java应用程序的垃圾收集(GC)、编译任务和其他运行时统计信息。jstat工具是基于命令行的,可以用来生成和显示JVM的性能统计信息。

jstat工具的使用方法如下:

  1. 打开命令行终端。
  2. 输入以下命令格式:
jstat -<option> [<interval> [<count>]] <vmid>

其中,<option>是指你想要查看的统计信息,比如编译任务的数量可以使用-compiler,垃圾收集可以使用-gc等。<interval><count>是用于连续地重复地收集数据的,比如你可以设置每500毫秒收集一次数据,共收集10次。<vmid>是虚拟机标识符,它是一个整数值,可以通过jps命令查看到。

例如,如果我们想要查看编号为1234的Java应用程序的垃圾收集统计信息,可以输入以下命令:

jstat -gc 1234

运行结果将会显示关于垃圾收集的各种统计信息,包括新生代、老年代的使用情况,垃圾回收的次数和时间等。

jstat是一个非常实用的工具,它可以帮助我们诊断和解决Java应用程序的性能问题。通过使用jstat,我们可以更好地了解JVM的运行情况,从而优化应用程序的性能。

三、总结

该命令适用的场景是程序内存不足或者GC频繁,这时候很可能是内存泄漏。通过用以上命令查看堆使用情况、大量对象被持续引用等情况。

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。

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

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

相关文章

教你如何高效批量分割长视频,让你的视频制作更轻松

在视频制作过程中&#xff0c;我们常常需要从长视频中分割出一些重要的片段&#xff0c;以便进行后续的编辑和处理。然而&#xff0c;这是一项耗时且繁琐的任务。今天&#xff0c;我们将为您介绍一种高效分割长视频的方法&#xff0c;让您在视频制作中更高效、更便捷。 首先&am…

C. To Add or Not to Add

题目&#xff1a; 样例1&#xff1a; 输入 5 3 6 3 4 0 2输出 3 4 样例2&#xff1a; 输入 3 4 5 5 5输出 3 5 样例3&#xff1a; 输入 5 3 3 1 2 2 1输出 4 2 思路&#xff1a; 贪心题目&#xff0c;化分离数为块。这里要注意的是 需要进行的排序 以及操作的过程是什么样子…

【本地代码问题】启动程序,报错:java.lang.IllegalArgumentException: No selectors

启动程序的时候报错了 问题怎么出现的解决方式&#xff0c;注释掉jetty的内容&#xff0c;回归tomcat的使用 问题怎么出现的 我本地启动程序的时候报错了&#xff1a;报的是这个错误&#xff0c;可能和容器的选择有关吧 解决方式&#xff0c;注释掉jetty的内容&#xff0c;回…

2.2 PE结构:文件头详细解析

PE结构是Windows系统下最常用的可执行文件格式&#xff0c;理解PE文件格式不仅可以理解操作系统的加载流程&#xff0c;还可以更好的理解操作系统对进程和内存相关的管理知识&#xff0c;DOS头是PE文件开头的一个固定长度的结构体&#xff0c;这个结构体的大小为64字节&#xf…

MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 MyBatisPlus 一、 逻辑删除1.1 数据库表中添加逻辑…

广州华锐互动:3D数字孪生楼宇资产管理系统展示楼宇实时信息

3D数字孪生楼宇资产管理系统由广州华锐互动开发&#xff0c;是一种基于数字孪生技术的智能化展示平台&#xff0c;它可以将楼宇的各项数据进行实时展示&#xff0c;为楼宇的管理者和使用者提供便捷的信息查询和服务。以下是一些实用功能&#xff1a; 1.实时监控&#xff1a;实时…

问道管理:刚刚,“金九”来了?

今天早盘&#xff0c;A股商场可谓“全面开花”。 银行、白酒等权重板块携手发力&#xff0c;带动上证指数、深证成指半日涨超1%&#xff1b;北交所股票更是全线飘红&#xff0c;北证50指数盘中最大涨幅超越8%&#xff0c;半日上涨5.85%。 到午间休市&#xff0c;A股商场超越3…

【C++】智能指针(RAII)详解

我们在上篇文章中&#xff08;异常处理详解&#xff09;提到了 RAII 。那么本篇文章会对此进行详解。重点是智能指针的详解。其中会讲解到 RAII 思想、auto_ptr、unique_ptr、shared_ptr、weak_ptr、循环引用问题。希望本篇文章会对你有所帮助。 文章目录 一、为什么需要智能指…

【java】【项目实战】[外卖九]项目优化(缓存)

目录 一、问题说明 二、环境搭建 2.1 Git管理代码 2.1.1 创建本地仓库 2.1.2 创建远程仓库 2.1.3 创建分支--》推送到远程仓库 2.2 maven坐标 2.3 配置文件application.yml 2.4 配置类RedisConfig 三、缓存短信验证码 3.1 实现思路 3.2 代码改造 3.2.1 UserContro…

CS420 课程笔记 P5 - 内存编辑 数据类型

文章目录 IntroductionData typesBooleansNegative numbers (Signed integers)Floating-point numbers (fractional numbers) Unknown value scansHealth findingFloat finding (Player position hack / Teleport hack) Additional things Introduction 这节课将结束数据类型并…

POI实现word文档导出

1 需求 在列表页面中点击合同按钮&#xff0c;跳转到合同页面 页面中有下载按钮&#xff0c;点击下载按钮&#xff0c;把页面展示的内容导出到word中。 2 分析 2.1 POI操作Word的API介绍 poi对低版本的doc本身支持的就不好所以我们直接说高版本的docx版本的api。 1、poi…

朴素,word,任何参考文献导入endnote

朴素&#xff0c;word&#xff0c;任何参考文献导入endnote 注意&#xff1a;对于以下这几种不做阐述&#xff0c;看其他帖子都有讲述&#xff1a; 这里的参考文献指的是类似于&#xff1a; [1]. Li Y, Lu Y, Huo X, et al. Bandgap tuning strategy by cations and halide io…

【python零基础入门学习】python基础篇之文件对象open、模块以及函数的使用(三)

本站以分享各种运维经验和运维所需要的技能为主 《python》&#xff1a;python零基础入门学习 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

【人月神话】重新探索人月神话:软件工程的现实与挑战

人月神话是一篇由美国软件工程师弗雷德里克布鲁克斯所写的软件工程经典之作&#xff0c;最早发表于1975年。这篇文章的全名是《人月神话&#xff1a;软件工程的神话与现实》&#xff08;The Mythical Man-Month: Essays on Software Engineering&#xff09;&#xff0c;它涵盖…

智慧导览|智能导游系统|AR景区导览系统|景区电子导览

随着文旅市场的加快复苏&#xff0c;以及元宇宙、VR、AR、虚拟数字人等新兴技术的快速发展&#xff0c;文旅行业也正在加快数字化转型的步伐&#xff0c;向智慧景区建设迈进。为满足不同年龄段游客的游览需要&#xff0c;提升旅游服务体验&#xff0c;越来越多的旅游景区、博物…

BlueStore BlueFS rocksdb 关联性梳理

Tag: ceph 12.2.4 BlueStore空间初始化 BlueStore磁盘空间管理 总述 OSD挂载目录基于文件系统管理&#xff0c;Slow、WAL、DB空间区域基于裸盘管理&#xff1b;Slow区域&#xff1a;此类空间主要用于存储对象数据&#xff0c;由BlueStore管理&#xff0c;其中分配于BlueFS空…

如何将枯燥的大数据进行可视化处理?

在数字时代&#xff0c;大数据已经成为商业、科学、政府和日常生活中不可或缺的一部分。然而&#xff0c;大数据本身往往是枯燥的、难以理解的数字和文字&#xff0c;如果没有有效的方式将其可视化&#xff0c;就会错失其中的宝贵信息。以下是一些方法&#xff0c;可以将枯燥的…

Python入门 类class 基础篇

记住一句话&#xff1a;类是模板&#xff0c;而实例则是根据类创建的对象。 我初学时对类的理解是从类的字面上&#xff0c;可以片面的认为它是一个种类&#xff0c;它是相似特征的抽像&#xff0c;也就是相似的东西&#xff0c;可以把相似特征的事务抽象成一个类。&#xff0…

基于串口校时的数字钟设计

文章目录 设计目标硬件设计数码管串口 软件设计顶层模块串口接收模块数据处理模块时钟模块串口发送模块 总结 设计目标 环境&#xff1a;ACX720开发板 实现功能&#xff1a; 数码管能够显示时分秒能够接收串口数据修改时间能够将当前时间以1s一次速率发送到电脑 硬件设计 数…

java之SpringBoot基础篇、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制作&#xff08;二&#xff09;JC-1-3.SpringBoot入门程序制作&#xff08;三&#xff09;JC-1-4.SpringBoot入门程序制作&#xff08;四&#xff09;…