千家信息网

如何通过jstack与jmap分析一次线上故障

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这期内容当中小编将会给大家带来有关如何通过jstack与jmap分析一次线上故障,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。下面是线上机器的cpu使用率,可以看到
千家信息网最后更新 2024年12月13日如何通过jstack与jmap分析一次线上故障

这期内容当中小编将会给大家带来有关如何通过jstack与jmap分析一次线上故障,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。

简单分析下可能出问题的地方,分为5个方向:

1.系统本身代码问题

2.内部下游系统的问题导致的雪崩效应

3.上游系统调用量突增

4.http请求第三方的问题

5.机器本身的问题

1.查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。

2.首先联系了内部下游系统观察了他们的监控,发现一起正常。可以排除下游系统故障对我们的影响。

3.查看provider接口的调用量,对比7天没有突增,排除业务方调用量的问题。

4.查看tcp监控,TCP状态正常,可以排除是http请求第三方超时带来的问题。

5.查看机器监控,6台机器cpu都在上升,每个机器情况一样。排除机器故障问题。

即通过上述方法没有直接定位到问题。

1.重启了6台中问题比较严重的5台机器,先恢复业务。保留一台现场,用来分析问题。

2.查看当前的tomcat线程pid

3.查看该pid下线程对应的系统占用情况。top -Hp 384

4.发现pid 4430 4431 4432 4433 线程分别占用了约40%的cpu

5.将这几个pid转为16进制,分别为114e 114f 1150 1151

6.下载当前的java线程栈 sudo -u tomcat jstack -l 384>/1.txt

7.查询5中对应的线程情况,发现都是gc线程导致的

8.dump java堆数据

sudo -u tomcat jmap -dump:live,format=b,file=/dump201612271310.dat 384

9.使用MAT加载堆文件,可以看到javax.crypto.JceSecurity对象占用了95%的内存空间,初步定位到问题。

MAT下载地址:http://www.eclipse.org/mat/

10.查看类的引用树,看到BouncyCastleProvider对象持有过多。即我们代码中对该对象的处理方式是错误的,定位到问题。

我们代码中有一块是这样写的

这是加解密的功能,每次运行加解密都会new一个BouncyCastleProvider对象,放倒Cipher.getInstance()方法中。

看下Cipher.getInstance()的实现,这是jdk的底层代码实现,追踪到JceSecurity类中

verifyingProviders每次put后都会remove,verificationResults只会put,不会remove.

看到verificationResults是一个static的map,即属于JceSecurity类的。

所以每次运行到加解密都会向这个map put一个对象,而这个map属于类的维度,所以不会被GC回收。这就导致了大量的new的对象不被回收。

将有问题的对象置为static,每个类持有一个,不会多次新建。

遇到线上问题不要慌,首先确认排查问题的思路:

  1. 查看日志

  2. 查看CPU情况

  3. 查看TCP情况

  4. 查看java线程,jstack

  5. 查看java堆,jmap

  6. 通过MAT分析堆文件,寻找无法被回收的对象

上述就是小编为大家分享的如何通过jstack与jmap分析一次线上故障了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

问题 对象 机器 分析 线程 系统 代码 情况 故障 使用率 日志 错误 定位 监控 业务 内容 文件 方法 第三方 这是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发真的有效果吗 农行缴费链接服务器超时 数据库表结构设计的描述 dns 网络安全 必要性 徐州宏智软件开发怎么样 丰台区互联网网络技术咨询哪家好 数据库查询最新的记录查询 计算机网络技术专升本合肥 幻x适合软件开发吗 致教职工的网络安全的一封信 局域网内搭建域名解析服务器 管家婆数据库账套删除 新型网络技术ppt 向进程发送数据库 网络安全协议书是怎么回事 2017年陕西网络安全 租用韩国服务器光算云.怎么走 网络安全渗透测试咋样啊 戴尔服务器怎么进管理接口 北京筑云互联网科技有限公司 使用外网连数据库安全吗 深圳招聘软件开发 手机软件开发所用到的技术 保定 软件开发 考证 重庆安卓软件开发哪家便宜 计算机三级网络安全 标本零为什么连接不了服务器 玉田项目网络技术售后服务 小程序免费服务器能用吗 工程网络技术计算讲课视频
0