服务不可用怎么排查?讲了100遍还是记不住?
点击上方蓝色“方志朋”,选择“设为星标”
回复“666”获取独家整理的学习资料!
下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。
1、排查思路
简单分析下可能出问题的地方,分为5个方向:
系统本身代码问题
内部下游系统的问题导致的雪崩效应
上游系统调用量突增
http请求第三方的问题
机器本身的问题
2、开始排查
查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。
首先联系了内部下游系统观察了他们的监控,发现一起正常。可以排除下游系统故障对我们的影响。
查看provider接口的调用量,对比7天没有突增,排除业务方调用量的问题。
查看tcp监控,TCP状态正常,可以排除是http请求第三方超时带来的问题。
查看机器监控,6台机器cpu都在上升,每个机器情况一样。排除机器故障问题。即通过上述方法没有直接定位到问题。
3、解决方案
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
对象持有过多。即我们代码中对该对象的处理方式是错误的,定位到问题。
4、代码分析
我们代码中有一块是这样写的
这是加解密的功能,每次运行加解密都会new一个BouncyCastleProvider对象,放倒Cipher.getInstance()方法中。
看下Cipher.getInstance()的实现,这是jdk的底层代码实现,追踪到JceSecurity类中
verifyingProviders每次put后都会remove,verificationResults只会put,不会remove.
看到verificationResults是一个static的map,即属于JceSecurity类的。所以每次运行到加解密都会向这个map put一个对象,而这个map属于类的维度,所以不会被GC回收。这就导致了大量的new的对象不被回收。
5、代码改进
将有问题的对象置为static,每个类持有一个,不会多次新建。
6、本文总结
遇到线上问题不要慌,首先确认排查问题的思路:
查看日志
查看CPU情况
查看TCP情况
查看java线程,jstack
查看java堆,jmap
通过MAT分析堆文件,寻找无法被回收的对象
来源 | https://urlify.cn/Q3Ar6z
热门内容:
SpringBoot开发微信公众号
拒绝接口裸奔!开放API接口签名验证!
笑了,面试官问我知不知道异步编程的Future。
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
服务不可用怎么排查?讲了100遍还是记不住?相关推荐
- “服务不可用“怎么排查?
下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复. 1.排查思路 简单分析下可能出问题的地方,分为5 ...
- 【CTO讲堂】打造数据可靠、服务高可用的客服平台
为了帮助IT从业者职业之路拥有更多收获,在诸多C粉的殷切期待下,由 CTO俱乐部打造的CTO线上讲堂自登场以来获得大家好评.本期邀请Udesk CTO肖立鹏带来"打造数据可靠.服务高可用的客 ...
- Druid获取连接超时,导致服务不可用
前言 一个微服务模块在运行一段时间之后,整体服务就不可用了,但是服务却没有打印任何错误日志.而对服务进行重启之后,服务就可以暂时提供一段时间服务,过一段时间之后再次不可用. 分析 服务进行重启就可以正 ...
- 全面!一文理解微服务高可用的常用手段
来自:高可用架构公众号 " 高可用并不是一套整体解决方案,而是由诸多环节组成,一环扣一环,鬼知道为了这些串联起来的环节,我得出多少张牌去应对,才能最终组成一个整个系统的高可用落地方案. 什么 ...
- ChaosBlade x SkyWalking 微服务高可用实践
来源|阿里巴巴云原生公众号 前言 在分布式系统架构下,服务组件繁多且服务间的依赖错综复杂,很难评估单个故障对整个系统的影响,而且请求链路长,如果监控告警.日志记录等基础服务不完善会造成故障响应.故障定 ...
- 微服务高可用之熔断器实现原理与 Golang 实践
I.内容提要 在微服务架构中,经常会碰到服务超时或通讯失败的问题,由于服务间层层依赖,很可能由于某个服务出现问题,不合理的重试和超时设置,导致问题层层传递引发雪崩现象,而限流和熔断是解决这个问题重要的 ...
- 全面 一文理解微服务高可用的常用手段
" 高可用并不是一套整体解决方案,而是由诸多环节组成,一环扣一环,鬼知道为了这些串联起来的环节,我得出多少张牌去应对,才能最终组成一个整个系统的高可用落地方案. 图片来自 Pexels 什么 ...
- 微服务高可用利器——Hystrix熔断降级原理实践总结
前言 最近在工作中参与组内服务稳定性建设,梳理我们目前服务现状并接入公司自研稳定性保障平台.对公司内自研组件以及业界流行的Hystrix做了学习,Netflix Hystrix 里面大量RxJava响 ...
- 查找计算机 域服务不可用,win7系统打印文件提示Active Directory域服务不可用解决方法...
办公用户因为工作需要,就需要安装打印机,也是办公设备中不可缺少一部分,使用过程中难免遇到一些故障问题,Win7系统打印文件时频繁弹出提示"Active Directory域服务当前不可用&q ...
最新文章
- 如何从机器学习数据中获取更多收益
- [C#]无边框窗体缩放的虚线框怎么实现
- IBatis.Net学习笔记六--再谈查询
- 给插店一个成功案例给自己一次机会
- cocos2d-x初探学习笔记(1)--HelloWorld
- 蚂蚁森林快捷指令_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰
- console 速查手册
- mysql nodejs 并发
- linux知识点查阅
- postgresql mysql数据类型_PostgreSQL和mysql数据类型对比兼容
- 【小记】-007--前端SEO优化
- 截获webView点击事件
- gitee和gitHub的命令和详细步骤操作
- 小米C++开发笔试真题
- Go --- html/template模板包的使用
- 有了这些好看的流程图模板,你也可以画出漂亮的流程图
- 暑假来了,画一个日月地球的轨道模型给孩子们,秒懂四季更迭、日蚀月蚀
- java vardump_Java内存查看与分析
- Google Groups 精彩推荐
- 关于DOCX XML