首页 > 编程语言 >Java 运行时 Debug 思路

Java 运行时 Debug 思路

时间:2024-03-18 20:11:06浏览次数:26  
标签:used Java MB pid free Debug capacity 思路 jmap

JStack 工具

top

使用 top 命令获取占用内存/CPU 最高进程的 pid
输入大写的 M 按照内存排序,大写的 P按照 CPU排序
image

top -Hp pid

使用top -Hp pid 可以查看该进程下,各个线程的cpu使用情况
image

jstack pid

通过top命令定位到cpu占用率较高的线程之后,接着使用jstack pid命令来查看当前java进程的堆栈状态

jstack -l PID >log.txt

把堆栈信息输出到文件中

分析堆栈信息

我们把占用cpu资源较高的线程pid(本例子是21350),将该pid转成16进制的值(5366)
在thread dump中,每个线程都有一个nid,我们找到对应的nid(5366),发现一直在跑(24行)

image

jmap 工具

查看堆heap占用情况

jmap -heap 90099
Attaching to process ID 90099, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01
 
using thread-local object allocation.
Parallel GC with 4 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 = 34603008 (33.0MB)
   used     = 9773032 (9.320289611816406MB)
   free     = 24829976 (23.679710388183594MB)
   28.24330185398911% used
From Space:
   capacity = 5242880 (5.0MB)
   used     = 0 (0.0MB)
   free     = 5242880 (5.0MB)
   0.0% used
To Space:
   capacity = 5242880 (5.0MB)
   used     = 0 (0.0MB)
   free     = 5242880 (5.0MB)
   0.0% used
PS Old Generation
   capacity = 89128960 (85.0MB)
   used     = 0 (0.0MB)
   free     = 89128960 (85.0MB)
   0.0% used
PS Perm Generation
   capacity = 22020096 (21.0MB)
   used     = 2666808 (2.5432662963867188MB)
   free     = 19353288 (18.45673370361328MB)
   12.110791887555804% used
 
677 interned Strings occupying 44048 bytes.

查看对象占用内存情况

jmap -histo:live 96176
 
 num     #instances         #bytes  class name
----------------------------------------------
   1:          5948         766656  <methodKlass>
   2:          5948         679168  <constMethodKlass>
   3:           401         474448  <constantPoolKlass>
   4:           365         289664  <constantPoolCacheKlass>
   5:           401         276112  <instanceKlassKlass>
   6:           562          93176  [B
   7:           900          86256  [C
   8:           463          45328  java.lang.Class
   9:           653          43216  [[I
  10:           608          37144  [S
  11:            45          24480  <objArrayKlassKlass>

其中 :
C is a char[]
S is a short[]
I is a int[]
B is a byte[]
I is a int[]

导出堆信息

可以使用jmap把堆信息导出。导出的命令如下:

jmap -dump:format=b,file=a.dmp 96185
Dumping heap to /Users/canglong/dev/test/a.dmp ...
Heap dump file created

dump 分析工具有很多,选择顺手的即可

标签:used,Java,MB,pid,free,Debug,capacity,思路,jmap
From: https://www.cnblogs.com/jietang64/p/18081302

相关文章

  • Python 递归函数实现二分法,带思路解释
            二分法可以大大提升对有序数列的查找,传统的迭代查找会挨个比较数列中的值,如果数列较为庞大会影响查询效率。二分法每次取数列的中间数与待查找数字比较大小,以升序排列为例子 首先要考虑数列长度的奇偶性。        奇数取中间位置的数字,如果比待查找......
  • JavaScript学习笔记1: JS引入方法
    JavaScriptJS的引入方法内部脚本在script标签间插入js语句,可以在任意位置放置任意数量的script,为了改善显示速度,一般把js脚本放在body的底部<!--内部脚本--><script>//警告框alert('HelloJS');</script>外部脚本外部定义的js脚本,在js脚本中......
  • JavaScript学习笔记2: js书写语法及变量
    JS书写语法以及变量变量声明变量<style>vara=20;a="张三";//js是一门弱类型语言,变量可以存放不同类型的值</style>几种不同的变量声明方式varvar定义的是全局变量在代码块中声明的变量,在代码块外也可以访问可以重复定义<style>{v......
  • 正则表达式(java)
    正则表达式多用于字符串匹配,检索。基础符号[]意义:或a[bc]等于ab或ac()意义:和(abc)只等于abc[^]意义:否a[^bc]表示不等于ab或ac*意义:零或更多ab*等于a,ab,abb...+意义:1或更多ab+等于abb,abbb...[0-9]+等于长度大于一的数字序列。[A-Z]+等于长度大......
  • JAVA--数据库(增删改)
    增(INSERT)#给指定字段添加数据insertinto表名(字段1,字段2...)values(值1,值2...);给全部字段添加数据insertinto表名values(值1,值2...);批量添加数据insertinto表名(字段1,字段2...)values(值1,值2...),(值1,值2...),(值1,值2...);   insertinto......
  • Java毕业设计 基于springboot vue招聘网站 招聘系统
    Java毕业设计基于springbootvue招聘网站招聘系统springbootvue招聘网站招聘系统功能介绍用户:登录个人信息简历信息查看招聘信息企业:登录企业信息管理发布招聘信息职位招聘信息管理简历信息管理管理员:注册登录管理员管理用户管理企业管理简历信息管理......
  • 牛客网BC-30 时间转化(思路)
    题目如下我们可以简单分析一下第一步,我们需要输入秒数第二步,进行下简单的数学分析(如何转化为时分秒)第三步,输出时分秒---------------------------------------------------------------------------------------------------------------------------------    ......
  • Java详细安装教程--Java(jdk)安装附jdk安装包 不用登录oracle官网
    Java详细安装教程--Java(jdk)安装一、java历史简介1991年Sun公司的JamesGosling等人开始开发名称为Oak(橡树)的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器,1994年将Oak语言更名为Java1998年JDK1.2时,更名为Java2Platform分为标准版J2SE,企业版J2EE,微型版J2ME......
  • 【Java】梳理总结:类与对象|面向对象三大特征|接口 抽象类
    目录一、类与对象1、面向对象和面向过程面向过程:侧重的是过程面向对象:侧重的是对象2、类与对象1、造车2、面向对象的世界里:3、写代码:3、方法/函数重载4、构造方法(构造方法的重载)1、无参构造2、有参构造3、构造方法也是方法,也可以进行重载5、this关键字6、局部......
  • Java-虚拟机
    Java内存区域详解运行时数据区域结构图:线程共享区域堆区存放常量池、实例对象等公共元素,所有线程共享。整个内存模块分新生代和年老代,新生代区分Eden、fromSurvivor和toSurvivor。Java虚拟机所管理的内存中最大的一块,Java堆是所有线程共享的一块内存区域,在虚拟机启动时......