IBM jca 工具的学习与整理
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最重要的几项工作主要如下
总要功能界面

thread status analysis
- 能够对 thread的状态进行分组. 界面化比较好看.

Methad analysis
- 可以对主要的方法进行pie图的区分

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

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左右给常规使用的环境
理论上可以支撑住这样的有异常的文件 只是大家都可能会卡一些.
所以有时候 可以通过技术手段解决问题, 有时候也可以通过钱来解决问题.

IBM jca 工具的学习与整理的更多相关文章
- Git学习资料整理
Git作为一个优秀的版本控制系统,是我们开发人员必须要学会使用的一个工具,接触git一年多以来,也看了不少相关资料,今天把我所看过的一些学习资源整理一下. Git入门当然首推廖雪峰廖老师的教程:Git ...
- 超全PHP学习资源整理:入门到进阶系列
PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂人家不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率 ...
- 第二弹:超全Python学习资源整理(进阶系列)
造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...
- NPM 学习笔记整理
NPM 学习笔记整理 阅读 550,2017年06月04日 发布,来源:blog.ihoey.com 什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ru ...
- Three入门学习笔记整理
一.官方网站:https://threejs.org 二.关于Three.js 三.开始 四.实例 基本结构 结果 五.概念 坐标系 场景 相机 灯光 3D模型 六.简单动画 七.交互控制 结束 # ...
- UWP学习目录整理
UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...
- iOS 开发学习资料整理(持续更新)
“如果说我看得比别人远些,那是因为我站在巨人们的肩膀上.” ---牛顿 iOS及Mac开源项目和学习资料[超级全面] http://www.kancloud.cn/digest/ios-mac ...
- DBN 入门学习资料整理
建议按序阅读 1.Deep Learning 概述 Deep Learning(深度学习)学习笔记整理系列 : http://blog.csdn.net/zouxy09/article/details ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- SVN版本控制工具使用学习
SVN版本控制工具使用学习 Subversion是优秀的版本控制工具. 1.下载和搭建SVN服务器 http://subversion.apache.org/packages.html 类型有5种,推 ...
随机推荐
- 设计模式Java实战,彻底学会
这是全网最强的Java设计模式实战教程.此教程用实际项目场景,结合SpringBoot,让你真正掌握设计模式. 网址是:Java设计模式实战专栏介绍 - 自学精灵(也可以百度搜索"自学 ...
- 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 03.EQS初体验:从智障到智慧
斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文章对应课程第十一章 43节.这篇文章会简单介绍EQS和实际上手使用,为AI添加更丰富的行为逻辑. 目录 初识 ...
- Java 查找并替换PDF中的指定文本
本文介绍通过Java程序批量替换PDF中的指定文本内容. 1. 程序环境准备如下: 程序使用环境如图,需要注意的是,本文使用了免费版的PDF jar工具:另外JDK版本建议使用高版本更佳. jar ...
- MySQL基础篇:第七章_详解mysql存储过程&函数
存储过程 含义:一组经过预先编译的sql语句的集合 好处: 1.提高了sql语句的重用性,减少了开发程序员的压力 2.提高了效率 3.减少了传输次数 分类: 1.无返回无参 2.仅仅带in类型,无返回 ...
- 如何利用动态配置中心在JavaAgent中实现微服务的多样化治理
本文分享自华为云社区<如何利用动态配置中心在JavaAgent中实现微服务的多样化治理>,作者:华为云开源 . 一.前言 随着JavaAgent在微服务治理方面的广泛应用和发展,我们可以在 ...
- 云图说|云数据库RDS跨区域备份
摘要:云数据库RDS支持将备份文件存放到另一个区域存储,某一区域的实例故障后,可以在异地区域使用备份文件在异地恢复到新的RDS实例,用来恢复业务. 本文分享自华为云社区<云图说_云数据库RDS- ...
- Mac Maven环境变量配置 zsh: command not found: mvn
之前配过环境变量,但是后来打开还是报 zsh: command not found: mvn 需要在运行前先刷下环境变量 source ~/.bash_profile 每次使用前都刷一下比较麻烦,这是 ...
- API 设计最佳实践(简版)
Restful API 本文简称API,是一个种面向资源的架构.在Restful中一个API对应一个资源,资源可以是文本,图片,视频等.API特征有如下: 每一个URI代表一种资源 客户端和服务器之间 ...
- 【JAVA基础】Swagger使用
Swagger使用 刷新权限 自定标签名称
- C#写日志工具类(新版)
源码:https://gitee.com/s0611163/LogUtil 昨天打算把我以前写的一个C#写日志工具类放到GitHub上,却发现了一个BUG,当然,已经修复了. 然后写Demo对比了NL ...