java诊断与调优常用命令jmap、jstack、jstat使用实战

news2024/9/20 1:14:48

java应用运行过程中难免会出现问题,特别是在生产环境,发生异常或宕机情况,需要诊断与分析,定位原因,进行优化,避免下次再次出现问题。
虽然现在有很多可视化工具,使用起来比命令行更方便,但我们仍需要对基本的命令进行必要的了解。实际上,可视化工具,往往是基于这些基本命令,拿到数据后进行综合处理后输出的最终结果。

今天从实战角度出发,介绍jps、jmap、jstack和jstat这四个命令的常用方式。

jps

作用:获取java进程号,是后续命令的基础。
当一台服务器运行多个java进程时,该命令默认只输出进程号和应用名,可能无法区分哪个是自己需要分析的对象,这时候可以附加参数 -l,显示完整路径。此外,附加参数-v,可显示jvm参数。

D:\jdk1.7.0_79\bin>jps
3824 Jps
3832 Bootstrap

D:\jdk1.7.0_79\bin>jps -l
3832 org.apache.catalina.startup.Bootstrap
3820 sun.tools.jps.Jps

D:\jdk1.7.0_79\bin>jps -v
1580 Jps -Dapplication.home=D:\jdk1.7.0_79 -Xms8m
3832 Bootstrap -Djava.util.logging.config.file=D:\MessageCenter\tomcat7\conf\log
ging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManage
r -Xms1024m -Xmx2048m -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs=
-Dcatalina.base=D:\MessageCenter\tomcat7 -Dcatalina.home=D:\MessageCenter\tomcat
7 -Djava.io.tmpdir=D:\MessageCenter\tomcat7\temp

问题:无效命令
原因:没有配置环境变量
解决:配置环境变量,或者到jdk对应目录bin下打开命令窗口

问题:windows环境下java进程存在,但执行jps无结果
原因:windows权限问题,在 Windows系统中,每个 java 进程启动之后都在 %TMP%/hsperfdata_${user} (${user}为当前登录用户名) 目录下建立一个以该 java 进程 pid 为文件名的文件,用以记录该 java 进程的一些信息。 通常是因为没有对这个文件的读写权限而导致jps命令查看不到进程。
解决:给当前操作系统用户,设置足够权限,注意,有时候需要重启操作系统才会令权限生效。

jmap

获取java进程内存情况。
常用命令:jmap -heap [进程ID]
作用:显示堆信息


D:\jdk1.7.0_79\bin>jmap -heap 3832
Attaching to process ID 3832, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.79-b02

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize      = 2147483648 (2048.0MB)
NewSize          = 1310720 (1.25MB)
MaxNewSize       = 17592186044415 MB
OldSize          = 5439488 (5.1875MB)
NewRatio         = 2
SurvivorRatio    = 8
PermSize         = 21757952 (20.75MB)
MaxPermSize      = 85983232 (82.0MB)
G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
capacity = 268959744 (256.5MB)
used     = 38999632 (37.19294738769531MB)
free     = 229960112 (219.3070526123047MB)
14.500174420154117% used
From Space:
capacity = 44564480 (42.5MB)
used     = 40604768 (38.723724365234375MB)
free     = 3959712 (3.776275634765625MB)
91.11464556525735% used
To Space:
capacity = 44564480 (42.5MB)
used     = 0 (0.0MB)
free     = 44564480 (42.5MB)
0.0% used
PS Old Generation
capacity = 716177408 (683.0MB)
used     = 8192 (0.0078125MB)
free     = 716169216 (682.9921875MB)
0.0011438506588579795% used
PS Perm Generation
capacity = 22544384 (21.5MB)
used     = 22498624 (21.45635986328125MB)
free     = 45760 (0.04364013671875MB)
99.7970226199128% used

15643 interned Strings occupying 1319328 bytes.

常用命令:jmap -histo [进程ID]
作用:按类型显示实例个数及占用空间,可用于排查异常情况,如内存泄露引发的大量对象占用内存不释放。
在这里插入图片描述

四列含义依次是序号、实例数量、占用空间、对应类名,注意如下特殊标记代表含义
[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]

常用命令:jmap -dump:format=b,file=20230214.dump [进程ID]
作用:生成堆的dump文件,用于内存使用情况进一步分析,通常会辅助以dump文件分析工具。

jstack

查看线程情况。
常用命令:jstack [进程ID]
作用:显示堆栈信息,通常用于查看是否存在死锁。
在这里插入图片描述

结合其他命令,找出占用cpu最高的堆栈信息(以下步骤仅适用于linux)
1.使用命令top -p [进程ID] ,显示你的java进程的内存情况,比如3832
2.按H,获取每个线程的内存情况
3.找到内存和cpu占用最高的线程tid,比如4977
4.转为十六进制得到 0x1371
5.执行jstack 3832| grep -A 10 1371,得到线程堆栈信息中1371这个线程所在行的后面10行
6.查看对应的堆栈信息找出可能存在问题的代码

jstat

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
jstat [-命令选项] [进程ID] [间隔时间(毫秒)] [查询次数]

常用命令: jstat -gc pid [interval] [count]
作用:垃圾回收统计
该命令是按容量显示,切换成百分比则更直观,命令如下:jstat -gcuitl pid [interval] [count]

在这里插入图片描述

使用该命令,可查看新生代(伊甸园、两个幸存区)、老年代的内存使用情况,垃圾回收频率。

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

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

相关文章

开学季好用电容笔有哪些?好用实惠的电容笔推荐

随着科学技术的快速发展,ipad的影响力越来越大,而且ipad的用户也越来越多,如果要提高ipad的功能,让ipad更加有趣,那么就需要一款非常适合自己,并且非常实用的电容笔。那么,究竟该选择哪个品牌的…

SpringBoot整合分布式锁redisson

1、导入maven坐标<!-- 用redisson作为所有分布式锁&#xff0c;分布式对象等功能框架--><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.5</version></dependency>2、red…

蓝牙 - BLE中的连接和扫描参数设定

连接参数 / Connection Parameters 连接参数由发起设备与连接请求一起发送&#xff0c;当连接建立后&#xff0c;任何一个设备都可以修改。这些参数如下&#xff1a; 连接间隔 / Connection Interval 在低功耗蓝牙连接中&#xff0c;使用了跳频方案。两台设备发送各自数据和接…

day48【代码随想录】动态规划之最长递增子序列、最长连续递增序列、最长重复子数组

文章目录前言一、最长递增子序列&#xff08;力扣300&#xff09;二、最长连续递增序列&#xff08;力扣674&#xff09;三、最长重复子数组&#xff08;力扣718&#xff09;前言 1、最长递增子序列 2、最长连续递增序列 3、最长重复子数组 一、最长递增子序列&#xff08;力扣…

rocketmq延时消息自定义配置;topic下tag使用

概述 使用的是开源版本的rocketmq4.9.4 rocketmq也是支持延时消息的。 rocketmq一般是4个部分&#xff1a; nameserver&#xff1a;保存路由信息broker&#xff1a;保存消息生产者&#xff1a;生产消息消费者&#xff1a;消费消息 延时消息的处理是在其中的broker中。 但是…

我为什么放弃WinUI3

基于WinUI3开发HiNote已经有一个多月的时间了&#xff0c;算是做出来一个简单能用的C端软件。 基于个人的经历&#xff0c;说说其中的开发体验。 UI设计语言 无论是否抄袭苹果&#xff0c;WinUI3给人的感觉都是眼前一亮的。简洁美观&#xff0c;现代化&#xff0c;毛玻璃的美…

rk3568网口CAN串口通信速率性能

通信接口性能参数外设接口性能参数测试结果为实验室实测值&#xff0c;可作为设计参考&#xff0c;但因测试环境和器件批次差异&#xff0c;可能会存在一定的误差&#xff0c;且测试结果依赖评估板性能&#xff0c;核心板搭配不同底板性能也可能存在差异&#xff0c;请结合实际…

Redis之分布式锁

随着业务发展的需要&#xff0c;原单体单机部署的系统被演化成分布式集群系统后&#xff0c;由于分布式系统多线程、多进程并且分布在不同机器上&#xff0c;这将使原单机部署情况下的并发控制锁策略失效&#xff0c;单纯的 Java API并不能提供分布式锁的能力。为了解决这个问题…

Java:顶级Java应用程序服务器 — Tomcat、Jetty、GlassFish、WildFly

如果你想编写Java web应用程序&#xff0c;首先需要做出一个艰难的决定&#xff1a;选择运行应用程序的Java应用程序服务器。什么是应用服务器?一般来说&#xff0c;应用程序服务器执行Java应用程序。在操作系统中启动它们&#xff0c;然后将应用程序部署到其中。将应用程序服…

盘点2023年大企业都在用的优秀项目管理软件

行内有句话&#xff1a;每个成功的项目背后肯定有一个成功的项目经理&#xff0c;而每个项目经理背后都少不了一些专业的项目管理工具。要在任何项目中取得成功&#xff0c;对项目进行全面的管理非常关键&#xff0c;包括项目的执行、计划、推进、监控、结果等&#xff0c;有了…

谈谈我对ai发展的看法

最近难得有时间&#xff0c;通过白话&#xff0c;聊聊我对AI的看法&#xff0c;仅代表个人观点首先表明我的观点&#xff1a;人类当前的人工智能成果&#xff0c;仍然停留在一知半解程度。技术的发展是需要长期的积累和进步&#xff0c;目前AI的发展仍处于入门阶段人类的发展必…

ar远程协助可视化云平台提高患者的医疗体验

“专家的指导意见很科学&#xff0c;患者恢复很快&#xff0c;情况稳定就可以转入普通病房了!这种云急救对基层医院来说太及时太必要了!大专家不用奔波&#xff0c;我们又提高了救治能力和效率!”这是来自某市基层主任的心里话。 传统远程协助的局限性 传统远程带来了便捷的线上…

【Java基础】输入与输出

输入与输出 输入 获取用键盘输入常用的两种方法 方法 1&#xff1a;通过 Scanner Scanner input new Scanner(System.in); String s input.nextLine(); input.close();方法 2&#xff1a;通过 BufferedReader BufferedReader input new BufferedReader(new InputStrea…

实验室设计|实验室设计要点SICOLAB

一、实验室设计规划要素1、实验室布局&#xff1a;实验室的布局要符合实验室工作流程&#xff0c;可以将实验室划分为干净区和污染区&#xff0c;以确保实验室的卫生和实验的准确性。2、设备选购&#xff1a;根据实验需要选择适当的设备&#xff0c;并确保设备的质量和性能符合…

LA@ML特征分解@奇异值分解@伪逆

文章目录特征分解几何示意图二次型和生成子空间奇异值分解理论数学风格的描述奇异值分解和特征分解的联系&#x1f60a;&#x1f388;机器学习风格的描述对角矩阵的记法酉矩阵unitary matrix性质Moore-Penrose 伪逆矩阵的逆和线性方程组的解(review)伪逆应用迹运算方阵行列式和…

代谢组+转录组分析为腰果树果实发育成熟过程中代谢网络提供见解

文章标题&#xff1a;Metabolomic and transcriptomic analyses provide insights into metabolic networks during cashew fruit development and ripening 发表期刊&#xff1a;Food Chemistry 影响因子&#xff1a;9.231 作者单位&#xff1a;海南大学 百趣生物提供服务…

推荐系统[八]算法实践总结V0:腾讯音乐全民K歌推荐系统架构及粗排设计

1.前言:召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回、粗排、精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板;粗排是初筛,一般不会上复杂模型;精排是整个推荐环节的重中之重,在特征和模型上都会做的比较复杂;重排,一般是做打散或满足…

Docker--------Day1

1.简介 您要如何确保应用能够在这些环境中运行和通过质量检测&#xff1f;并且在部署过程中不出现令人头疼的版本、配置问题&#xff0c;也无需重新编写代码和进行故障修复&#xff1f; Docker之所以发展如此迅速&#xff0c;也是因为它对此给出了一个标准化的解决方案-----…

【牛客刷题专栏】0x0B:JZ3 数组中重复的数字(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录前言问题…

软件包被拦截、删除、无法运行,,,卸载掉自带杀毒软件Windows Defender、关闭防火墙,,,网上各种办法都试过了,不起作用。。。最后一招解决

文章目录1 问题描述2 解决办法3 下载文件被阻止或运行被阻止4 防火墙关闭方法&#xff08;补充&#xff09;5 卸载windows自带的杀毒软件Windows Defender&#xff08;最简单方法&#xff09;1 问题描述 我的win10没有安装任何杀毒软件&#xff0c;只有系统自带的Windows Defe…