jvm之常用命令行工具

news2024/9/20 5:31:33

写在前面

本文已起看下给我们的Java程序看病常用到的工具都有哪些,通过工具得到指标,通过指标分析病情,从而给出对应的治疗方案

1:jps/jinfo

用来获取运行的jvm进程信息,一般我们使用该命令来获取进程号,进而使用其来获取其他信息,jps如下:

C:\Users\Administrator>jps
21540 BB
21272 Jps

C:\Users\Administrator>jps -mlv
21540 com.example.BB
22012 sun.tools.jps.Jps -mlv -Denv.class.path=.;D:\program_files\jdk1.8.0_202\lib\dt.jar;D:\program_files\jdk1.8.0_202\lib\tools.jar; -Dapplication.home=D:\program_files\jdk1.8.0_202 -Xms8m

jinfo可用于获取指定进程的参数信息,系统环境变量信息等,如下:

C:\WINDOWS\system32>jinfo -flags 21540
Attaching to process ID 21540, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=266338304 -XX:MaxHeapSize=4242538496 -XX:MaxNewSize=1414004736 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=88604672 -XX:OldSize=177733632 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:

2:jstat

该工具用于获取GC相关的信息,如GC的次数,时间,各个内存区域的大小等,主要有如下两种方式。

2.1:查看GC的内存百分比信息

如下:

C:\WINDOWS\system32>jstat -gcutil -t 22900 1000 1000
Timestamp         S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
           36.0   0.00  99.87  76.34  30.32  74.48  79.26      1    0.014     0    0.000    0.014
           37.0   0.00  99.87  81.15  30.32  74.48  79.26      1    0.014     0    0.000    0.014
           38.0   0.00  99.87  85.96  30.32  74.48  79.26      1    0.014     0    0.000    0.014
           39.0   0.00  99.87  90.76  30.32  74.48  79.26      1    0.014     0    0.000    0.014
           40.0   0.00  99.87  97.30  30.32  74.48  79.26      1    0.014     0    0.000    0.014

注意-t的位置必须再例子中的位置,其他位置都不行

每列的含义如下:

Timestamp:当前程序运行的秒数
S0:survivor0的占用百分比
S1:survivor1的占用百分比
E:Eden的占用百分比
O:Old的占用百分比
M:Meta的占用百分比
CCS:
YGC:young gc的总次数
YGCT:young gc的总时间
FGC:full gc的总次数
FGCT:full gc的总时间
GCT:所有GC的总时间

2.2:查看GC的内存大小信息

如下:

C:\WINDOWS\system32>jstat -gc -t 22900 1000 1000
Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
          808.0 15360.0 15872.0 15336.9  0.0   10752.0   5682.9  2525184.0  2486393.6  4864.0 3623.0 512.0  405.8     170    1.353  39      1.032    2.385
          809.0 15360.0 15872.0 15336.9  0.0   10752.0   8857.8  2525184.0  2486393.6  4864.0 3623.0 512.0  405.8     170    1.353  39      1.032    2.385
          810.0 16896.0 15872.0  0.0   15825.4 10752.0   1190.1  2525184.0  2496602.0  4864.0 3623.0 512.0  405.8     171    1.362  39      1.032    2.394
          811.1 16896.0 15872.0  0.0   15825.4 10752.0   4511.5  2525184.0  2496602.0  4864.0 3623.0 512.0  405.8     171    1.362  39      1.032    2.394

注意-t的位置必须再例子中的位置,其他位置都不行

每列的含义如下:

Timestamp:当前程序运行的秒数
S0C:survivor0的总字节数
S1C:survivor1的总字节数
S0U:survivor0的已使用的字节数,S0U/S0C即为S0使用的百分比
S1U: survivor0的已使用的字节数,S0U/S0C即为S0使用的百分比
EC: Eden总大小     
EU: Eden使用的大小,EU/EC就是Eden的使用百分比       
OC:Old总大小         
OU:Old使用大小      
MC:Meta总大小     
MU:Meta使用大小
CCSC:   
CCSU:   
YGC:young gc的总次数
YGCT:young gc的总时间    
FGC:full gc的总次数
FGCT:full gc的总时间     
GCT:所有gc 的总时间

3:jmap

该命令用来获取jvm运行的快照信息,主要包括堆内存快照,堆内存对象实例信息快照,堆转储快照。

  • 获取堆内存快照
C:\WINDOWS\system32>jmap -heap 21448
Attaching to process ID 21448, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08

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

Heap Configuration:
   MinHeapFreeRatio         = 0
   ...
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 66584576 (63.5MB)
   used     = 53232656 (50.76661682128906MB)
   free     = 13351920 (12.733383178710938MB)
   79.94742806502215% used
From Space:
   capacity = 11010048 (10.5MB)
   used     = 11009984 (10.49993896484375MB)
   free     = 64 (6.103515625E-5MB)
   99.99941871279762% used
To Space:
   capacity = 11010048 (10.5MB)
   used     = 0 (0.0MB)
   free     = 11010048 (10.5MB)
   0.0% used
PS Old Generation
   capacity = 177733632 (169.5MB)
   used     = 53833600 (51.3397216796875MB)
   free     = 123900032 (118.1602783203125MB)
   30.288921344948378% used

2777 interned Strings occupying 229112 bytes.

展示了配置信息,以及当前运行状态下的各个主要内存区域的占用情况。

  • 获取堆内存对象实例快照用的多
C:\WINDOWS\system32>jmap -histo 21448

 num     #instances         #bytes  class name
----------------------------------------------
   1:         15568      777974120  [B
   2:          3823         369768  [C
   3:           476         140704  [I
   4:           613         125176  [Ljava.lang.Object;
   ...

可以看到本例中byte[]的对象实例数最多,有15568个,占用堆内存大小将近800m。

  • 获取堆转储快照
C:\WINDOWS\system32>jmap -dump:format=b,file=d:\\test\\xxxx1.hprof 22180
Dumping heap to D:\test\xxxx1.hprof ...
Heap dump file created

获取文件后我们就可以使用分析工具,如在线分析工具heapdump 来分析和定位问题,如下也可以看到byte[]的对象实例数最多:

在这里插入图片描述

4:jstack

查看线程信息,一般在定位CPU高 之类的问题时会使用到,如:

C:\WINDOWS\system32>jstack -l 6908
2023-05-04 18:07:46
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.202-b08 mixed mode):

"Service Thread" #10 daemon prio=9 os_prio=0 tid=0x000000001dc18000 nid=0x2014 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

...
"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x000000001dc05800 nid=0x1888 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

...

"main" #1 prio=5 os_prio=0 tid=0x000000000286d800 nid=0x5108 waiting on condition [0x000000000276f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.example.BB.main(BB.java:15)

   Locked ownable synchronizers:
        - None

"VM Thread" os_prio=2 tid=0x000000001db72800 nid=0x4464 runnable

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x0000000002887800 nid=0x5ac0 runnable
...
"GC task thread#9 (ParallelGC)" os_prio=0 tid=0x0000000002897000 nid=0x53b8 runnable

"VM Periodic Task Thread" os_prio=2 tid=0x000000001dcab800 nid=0x5ba0 waiting on condition

另外,kill -3 PID 会强制进程打印自己的线程信息到控制台,即此时,如果时执行的话,会在应用程序本身的控制台看到线程的打印信息

5:jcmd

这是一个综合的命令,如果有该命令的话,可优先使用。

  • 查看都支持哪些内容
C:\WINDOWS\system32>jcmd 6908 help
6908:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help

主要有虚拟机相关的,以VM打头,垃圾回收相关的,以GC打头。

  • VM相关
    查看启动时长:
C:\WINDOWS\system32>jcmd 6908 VM.uptime
6908:
504.189 s

查看JVM的版本号:

C:\WINDOWS\system32>jcmd 6908 VM.version
6908:
Java HotSpot(TM) 64-Bit Server VM version 25.202-b08
JDK 8.0_202

查看JVM的系统属性:

C:\WINDOWS\system32>jcmd 6908 VM.system_properties
6908:
#Thu May 04 18:18:19 CST 2023
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D\:\\program_files\\jdk1.8.0_202\\jre\\bin
java.vm.version=25.202-b08
java.vm.vendor=Oracle Corporation
java.vendor.url=http\://java.oracle.com/
path.separator=;
...
  • GC相关
    查看类直方图:
C:\WINDOWS\system32>jcmd 16032 GC.class_histogram
16032:

 num     #instances         #bytes  class name
----------------------------------------------
   1:         10617      510987592  [B
   2:          5734         457744  [C
   3:          5601         134424  java.lang.String
   4:           630         103072  [Ljava.lang.Object;
   ...

和jmap -histo PID一样的结果

查看堆内存使用情况:

C:\WINDOWS\system32>jcmd 16032 GC.heap_info
16032:
 PSYoungGen      total 125440K, used 35554K [0x000000076bb80000, 0x000000077a380000, 0x00000007c0000000)
  eden space 19456K, 83% used [0x000000076bb80000,0x000000076cb48f88,0x000000076ce80000)
  from space 105984K, 18% used [0x0000000773c00000,0x0000000774eefbe0,0x000000077a380000)
  to   space 109056K, 0% used [0x000000076ce80000,0x000000076ce80000,0x0000000773900000)
 ParOldGen       total 761344K, used 693833K [0x00000006c3200000, 0x00000006f1980000, 0x000000076bb80000)
  object space 761344K, 91% used [0x00000006c3200000,0x00000006ed7924a8,0x00000006f1980000)
 Metaspace       used 3859K, capacity 4632K, committed 4864K, reserved 1056768K
  class space    used 427K, capacity 460K, committed 512K, reserved 1048576K
  • 其他
    查看线程信息:
C:\WINDOWS\system32>jcmd 16032 Thread.print
16032:
2023-05-04 18:23:58
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.202-b08 mixed mode):

"Service Thread" #10 daemon prio=9 os_prio=0 tid=0x000000001df6c000 nid=0x5e8c runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C1 CompilerThread3" #9 daemon prio=9 os_prio=2 tid=0x000000001dee8800 nid=0x6090 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

和jstack -l PID结果是一样的

6:junscript/jjs

jrunscript直接执行js代码:

C:\WINDOWS\system32>jrunscript -e "cat('http://www.baidu.com')"
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度?下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度?? class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必?</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP?030173?&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

同curl。

jjs以交互式的方式执行js代码,如:

C:\WINDOWS\system32>jjs
jjs> var a=9;
jjs> var b=8
jjs> b
8
jjs> var c=a+b
jjs> c

写在后面

参考文章列表

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

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

相关文章

CTF权威指南 笔记 -第二章二进制文件- 2.4 -动态链接

目录 静态文件的缺点 动态链接 位置无关代码 延迟绑定 _dl_runtime_reslove 函数定义 深入审视 静态文件的缺点 随着可执行文件的增加 静态链接带来的浪费空间问题就会愈发严重 如果大部分可执行文件都需要glibc 那么在链接的时候就需要把 libc.a链接进去 如果一个libc…

Spark大数据处理讲课笔记3.6 RDD容错机制

文章目录 零、本讲学习目标一、RDD容错机制&#xff08;一&#xff09;血统方式&#xff08;二&#xff09;设置检查点方式 二、RDD检查点&#xff08;一&#xff09;RDD检查点机制&#xff08;二&#xff09;与RDD持久化的区别&#xff08;三&#xff09;RDD检查点案例演示 三…

Matlab 多项式拟合

一、线性 1、多项式 corrcoef函数 corrcoef函数用来计算矩阵相关系数。 (1)、corrcoef(x)&#xff1a;若x为一个矩阵&#xff0c;返回的则是一个相关系数矩阵。 (2)、corrcoef(x,y)&#xff1a;计算列向量x、y的相关系数&#xff0c;要求x、y具有相等的元素个数。如果x、y是矩…

2023河南土著双非硕士——毕业季秋招春招就业经验分享(仅限于在河南找工作,毕业想留河南)

作为一名河南土生土长的人&#xff0c;本硕皆就读于河南某双非一本&#xff0c;是一个实打实的河南土著&#xff0c;河南作为互联网就业的贫困环境&#xff0c;相较于CSDN博客上那么多动不动就腾讯、阿里、字节等大厂的就业经验分享&#xff0c;我更想分享一下我在河南省内找工…

百度文心一言正式亮相,数说故事受邀成为首批内测企业

3月16日下午&#xff0c;百度在北京召开新闻发布会&#xff0c;正式推出基于百度新一代大语言模型的生成式AI产品——文心一言&#xff0c;百度创始人、董事长兼首席执行官李彦宏现场展示了文心一言在文学创作、商业文案创作、数理推算、中文理解、多模态生成五个使用场景中的综…

卖期权的时候,我们在卖什么?

一直在思考一个问题&#xff0c;卖期权到底是怎么回事&#xff1f;卖实值期权、平值期权、虚值期权背后的本质有什么区别&#xff1f;卖近期的和远期的期权背后的本质又是什么?我们用沪深300指数期权来研究一下。 我们先从数据上来直观感受一下。上面这个表格是2020-12-09日这…

基于R语言的贝叶斯时空数据模型实践技术

时间&#xff0d;空间数据&#xff08;以下简称“时空数据”&#xff09;是最重要的观测数据形式之一&#xff0c;很多科学研究的数据都以时空数据的形式得以呈现&#xff0c;而科学研究目的可以归结为挖掘时空数据中的规律。另一方面&#xff0c;贝叶斯统计学作为与传统统计学…

【OpenCV】 2D-2D:对极几何算法原理

2D-2D匹配: 对极几何 SLAM十四讲笔记1 1.1 对极几何數學模型 考虑从两张图像上观测到了同一个3D点&#xff0c;如图所示**。**我们希望可以求解相机两个时刻的运动 R , t R,t R,t。 假设我们要求取两帧图像 I 1 , I 2 I_1,I_2 I1​,I2​之间的运动,设第一帧到第二帧的运动为…

MiniGPT-4部署过程

文章目录 项目背景部署过程环境配置与文件准备部署推理报错1报错2 项目背景 2023年4月19日&#xff0c;开源项目MiniGPT-4发布&#xff0c;该项目是由KAUST&#xff08;沙特阿卜杜拉国王科技大学&#xff09;&#xff0c;是几位博士开发的。 项目地址&#xff1a;https://gith…

Spark大数据处理讲课笔记3.4 理解RDD依赖

文章目录 零、本讲学习目标一、RDD依赖二、窄依赖&#xff08;一&#xff09;map()与filter()算子&#xff08;二&#xff09;union()算子&#xff08;三&#xff09;join()算子 三、宽依赖&#xff08;一&#xff09;groupBy()算子&#xff08;二&#xff09;join()算子&#…

字符设备驱动

字符设备就是按字节流进行读写的设备&#xff0c;读写数据分先后顺序&#xff0c;如点灯&#xff0c;IIC&#xff0c;SPI&#xff0c;LCD等都是字符设备&#xff0c;这些设备的驱动就叫字符设备驱动。 include/linux/fs.h中 file_operations 结构体为内核驱动操作函数集合&…

如何关闭tomcat?tomcat端口号被占用怎么办

我tomcat一跑就报被占用怎么办&#xff1f;我没开tomcat呀&#xff01;&#xff01; 这种情况一般是你上一次打开tomcat没有关tomcat服务就关闭了变成软件&#xff08;如强行关闭正在运行tomcat的idea&#xff09;&#xff0c;这样你在开tomcat就会显示端口号占用了&#xff0…

API 渗透测试从入门到精通系列文章(上)

导语&#xff1a;这是关于使用 Postman 进行渗透测试系列文章的第一部分。 这是关于使用 Postman 进行渗透测试系列文章的第一部分。我原本计划只发布一篇文章&#xff0c;但最后发现内容太多了&#xff0c;如果不把它分成几个部分的话&#xff0c;很可能会让读者不知所措。 所…

SMOKE Single-Stage Monocular 3D Object Detection via Keypoint Estimation 论文学习

论文地址&#xff1a;SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation Github 地址&#xff1a;https://github.com/open-mmlab/mmdetection3d/tree/main/configs/smoke 1. 解决了什么问题&#xff1f; 预测物体的 3D 朝向角和平移距离对于自动驾…

hive之入门配置

学习hive之路就此开启啦&#xff0c;让我们共同努力 目录 Hive网站&#xff1a; Hive的安装部署&#xff1a; 启动并使用Hive&#xff1a; 安装Mysql: 安装Mysql依赖包&#xff1a; 启动Mysql: 查看密码&#xff1a; 登录root: 密码错误报错&#xff1a; 元数据库配置…

信创国产中间件概览

信创国产中间件概览 中间件国内中间件市场份额第一梯队仍然是IBM> 和Oracle&#xff0c;市场份额合计51%。第二梯队为五大国产厂商&#xff0c;包括东方通、普元信息、宝兰德、中创中间件、金蝶天燕&#xff0c;市场份额合计15%。东方通应用服务器TongWeb对标 开源&#xf…

人脸检测和行人检测3:Android实现人脸检测和行人检测检测(含源码,可实时检测)

人脸检测和行人检测3&#xff1a;Android实现人脸检测和行人检测检测(含源码&#xff0c;可实时检测) 目录 人脸检测和行人检测3&#xff1a;Android实现人脸检测和行人检测(含源码&#xff0c;可实时检测) 1. 前言 2. 人脸检测和行人检测数据集说明 3. 基于YOLOv5的人脸检…

Databend 开源周报第 91 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 新数据类型&…

【Robot Framework】RF关键字大全

收录工作当中最常用的Robot Framework关键字 内容较多&#xff0c;可以CtrlF快速搜索自己想要的 1. RF循环使用&#xff08;FOR循环&#xff09; {list1} create list LOG TXT INI INF C CPP JAVA JS CSS LRC H ASM S ASP FOR ${file_type} IN {list1} log 构造请求参数 ${t…

第二十二章 解释器模式

文章目录 前言一、解释器模式基本介绍解释器模式的原理类图 二、通过解释器模式来实现四则运算完整代码抽象表达式类 Expression变量表达式类 VarExpression抽象运算符号解析器 SymbolExpression加法解释器 AddExpression减法解释器 SubExpression计算器类 CalculatorClint 测试…