Java问题诊断和排查工具

文章目录

  • 一、前言
  • 二、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.mzph.cn/news/68849.shtml

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

相关文章

FFmpeg rtp rtp_mpegts的区别

rtp 在FFmpeg中&#xff0c;rtpenc是一个用于将音视频数据封装成RTP&#xff08;Real-time Transport Protocol&#xff09;数据包并发送到网络上的编码器。RTP是一种用于实时传输音视频数据的协议&#xff0c;常用于视频会议、流媒体等场景。 rtpenc可以将音视频数据封装成R…

【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键

一、简介 在数据库管理中&#xff0c;外键是一种重要的约束&#xff0c;用于确保数据的一致性和完整性。然而&#xff0c;在某些情况下&#xff0c;我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除&#xff0c;迁移数据&#…

K8S的介绍和架构

仅供入门 K8S的介绍和架构 一. 什么是kubernetes二、Kubernetes架构和组件 2.1 核心组件 2.1.1 Kubernetes Master控制组件&#xff0c;调度管理整个系统&#xff08;集群&#xff09;&#xff0c;包含如下组件: a、Kubernetes API Serverb、Kubernetes Schedulerc、Kubernet…

Linux 禁止用户或 IP通过 SSH 登录

Linux 禁止用户或 IP通过 SSH 登录 限制用户 SSH 登录 1.只允许指定用户进行登录(白名单): 在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers 选项,(配置完成需要重启 SSHD 服务)格式如下: AllowUsers aliyun test@192.168.1.1 # 允许 aliyun 和从 19…

Apply AirPlay+HomeKit专栏目录

从2022年起&#xff0c;我陆续写了一些关于Airplay和HomeKit的相关文章&#xff0c;主要介绍了关于苹果认证的一些技术和如何使用&#xff0c;因为这是一个相对来说小众冷门的领域&#xff0c;网络上很多资料都找不到&#xff0c;最开始刚接触苹果物联网IOT和智能家居时&#x…

springboot自动装配原理,手写一个starter。

文章目录 springboot自动装配原理手写starter手写starter总结&#xff1a; springboot自动装配原理 口述&#xff1a; springboot自动装配的话它其实就是只需要我们添加一个starter起步依赖&#xff0c;它就能完成这个依赖组件相关Bean的自动注入&#xff0c;其实就是自动的将…

Android通过setaffinity实现绑核

有时候为了降低App算力占用&#xff0c;会把关键的线程绑定到大核中&#xff0c;下面介绍一种绑核的方式 查看绑核 查看pid :/ # ps -A | grep test u0_a15 25178 405 15950272 176544 do_epoll_wait 0 S com.test.jnites查看线程号 top -H -p 25178 25224 u0_…

SpringMVC的工作流程及入门

目录 一、概述 ( 1 ) 是什么 ( 2 ) 作用 二、工作流程 ( 1 ) 流程 ( 2 ) 步骤 三、入门实例 ( 1 ) 入门实例 ( 2 ) 静态资源处理 给我们带来的收获 一、概述 ( 1 ) 是什么 SpringMVC是一个基于Java的Web应用开发框架&#xff0c;它是Spring Framework的一部…

小程序进阶-inline、block和inline-block的区别与联系

背景介绍 每个html标签元素都有默认的元素类型&#xff0c;主要包括两大类&#xff1a;inline内联元素和block块元素。其他则称为可变元素&#xff0c;会根据上下文语境决定该元素为inline元素或者block元素。 在css里&#xff0c;有一个display的属性&#xff0c;它规定元素应…

5.bs4的基本使用

bs4是python的一个第三方库&#xff0c;用来做数据解析的 目录 1 安装bs4 2 解析本地的html文件 3 解析网上的html 4 找到指定的标签 4.1 获取页面中第一个指定标签的内容 4.2 查找页面中的第一个符合要求的内容 BeautifulSoup.find() 4.2.1 标签 4.2.2 类名 …

Linux--进程概念

1.什么是程序&#xff1f;什么是进程&#xff1f;有什么区别&#xff1f; 程序&#xff1a;是静态的概念&#xff0c;gcc xxx.c -o pro 磁盘中生成的pro文件&#xff0c;叫做程序。 进程&#xff1a;是程序的一种与运行活动&#xff0c;通俗的意思是程序跑起来了&#xff0c;系…

linux免密登录最简单--图文详解

最简单的免密登录 1.A电脑生成秘钥 ssh-keygen -t rsa 2.A电脑将秘钥传给B电脑 ssh-copy-id root192.168.1.129 #将秘钥直接传给B电脑 需要输入B电脑的密码&#xff0c;可以看到成功。 3.测试 同理&#xff1a;如果B->A也需要免密登录&#xff0c;统一的操作。 大功告…

PHP8的数组-PHP8知识详解

今天开始学习数组&#xff0c; 本文主要讲了三点&#xff1a;什么是数组、php8中数组的改进、数组函数。 一、什么是数组 在PHP8中&#xff0c;数组是非常重要的数据类型。相对于其他的数据类型&#xff0c;数组更像一种结构&#xff0c;而这种结构可以储存一系列数值。 数组…

git bash adb push 路径问题

adb push xxx.so //sdcard/DCIM/参考 https://stackoverflow.com/questions/16344985/how-do-i-pass-an-absolute-path-to-the-adb-command-via-git-bash-for-windows

【SpringSecurity】八、集成图片验证码

文章目录 1、生成图片验证码2、创建验证码过滤器3、将过滤器加入SpringSecurity过滤链4、修改登录页 SpringSecurity是通过过滤器链来完成的&#xff0c;接下来的验证码&#xff0c;可以尝试创建一个过滤器放到Security的过滤器链中&#xff0c;在自定义的过滤器中比较验证码。…

90、00后严选出的数据可视化工具:奥威BI工具

90、00后主打一个巧用工具&#xff0c;绝不低效率上班&#xff0c;因此当擅长大数据智能可视化分析的BI数据可视化工具出现后&#xff0c;自然而然地就成了90、00后职场人常用的数据可视化工具。 奥威BI工具三大特点&#xff0c;让职场人眼前一亮&#xff01; 1、零编程&…

医学影像工作站PACS系统源码,医院PACS系统源码

医学影像(PACS)系统主要进行病人信息和影像的获取、处理、存储、调阅、检索、管理&#xff0c;并通过网络向全院提供病人检查影像及诊断报告&#xff1b;各影像科室之间共享不同设备的病人检查影像及诊断报告&#xff1b;在诊断工作站上&#xff0c;调阅HIS中病人的其它信息&am…

A Review on Graph Neural Network Methods in Financial Applications

本文是与GNN有关的论文综述&#xff0c;针对《A Review on Graph Neural Network Methods in Financial Applications》的翻译。 图神经网络在金融中的应用综述 摘要1 引言2 图分类3 特征处理4 图神经网络模型5 应用6 挑战 摘要 金融数据具有多个组成部分和多个关系&#xff…

Android架构 架构和 CPU ABI - NDK

查看设备架构 adb -s emulator-5554 shell getprop ro.product.cpu.abi C:\Users\liyd>adb -s emulator-5554 shell getprop ro.product.cpu.abi x86_64C:\Users\liyd>adb -s 804c11f1 shell getprop ro.product.cpu.abi arm64-v8amumu模拟器12 C:\Users\liyd>adb …

VB合同管理系统设计与实现

摘 要 在21世纪,随着计算机科学的发展,数据库技术在人们日常工作中的应用越来越广泛,为广大用户提供了更加周到和人性化的服务。数据库技术已逐渐成为当今计算机应用的潮流。本文主要是通过制作一款数据库软件—即“合同管理系统”来介绍数据库技术在人们日常生活和工作…