引言

最近项目部门反应有个系统特别卡顿,很多页面都打不开了,开发人员告诉我说最近没有进行代码升级,我登录到对应的服务器上执行了top命令,发现cpu飙升到100%,对于这种问题我们应该快速的定位到问题,否则会影响线上系统的正常作业。

对于造成这种问题的可能原因,迅速的在头脑中闪过四种情况:

1、某个接口响应时间超长,并且可能被频繁调用

2、产生了过大的对象,造成频繁FGC

3、代码出现死循环

4、线程出现死锁

下面是小编的定位问题的步骤:

1)top

2)top  -Hp 2848

3)printf "%x" 2925

4)jstack 2848 | grep 0xb6d -C50 --color

第一、执行top命令,结果如下

我们根据top结果发现,有java进程CPU占用超过100%,说明这个进程中的代码出现问题了

第二、执行top  -Hp 2848 查看该pid详情

从上面结果,我们基本可以排除产生大对象的情况,因为如果有大对象产生,这个时候的结果应该是有多个进程CPU占用都会超过80%,其中有多个进程在在进行GC,从而造成CPU飙升。

第三  执行 printf "%x" 2925 转换为 十六进制

第四 执行 jstack 2848 | grep 0xb6d -C50 --color 查看具体的信息,由于我们项目使用daemon用户启动,所以我执行的命令为

/sbin/runuser -s /bin/bash daemon -c "jstack 2848 | grep 0xb6d -C50 --color"

上图中红色的nid就是我们查看的进行对应的详细代码信息,从上面我们就可以很快的定位到具体的代码行,我们系统此处代码是一个统计的方法,由于前端传递的时间跨度非常大,并且多个人在频繁的刷新造成系统卡死。

注意:我们执行jstack的时候,执行用户需要和进程启动用户一直,否则会提示下面错误

Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

********************下面我们分析一下 代码执行过程中产生 "超大对象" 出现的现象***************************************

1、top

2、 执行命令 top -Hp 23002

我们发现有很多的进程cpu占用都查过了90%,这种情况很可能是多个进程在进行FGC,为了验证这种情况我们执行下面命令

3、jstat -gcutil 23002 2000 5

上面命令是 输出该进程在jvm中的占用情况  每2000毫秒执行一次 一共执行5次

从输出信息可以看出,Eden区内存占用100%,Old区内存占用99.97%,Full GC的次数高达170次,并且频繁Full GC,Full GC的持续时间也特别长,平均每次Full GC耗时5.93秒(1009.445/170)。根据这些信息,基本可以确定是程序代码上出现了问题,可能存在不合理创建对象的地方

4、将上面的对应的四个线程号十进制转换为 十六进制

5、执行命令 jstack 23002 |grep "0x59dd" -C50 --color 查看对应的线程信息

由上图可见,cpu使用率高的线程都在GC task,JVM的GC线程一直在占用大量CPU

6、也可以执行命令jstack -l 23002 >/data1/23002.statck 将对应的进程号的栈信息输入到指定目录

7、在23002.statck中就行过滤查询

7、过滤搜索一下 我们项目名称,就可以看到具体的代码位置

8、然后根据具体的代码分析一下,出现 问题的具体原因

小结

线上出现cpu100%问题需要我们在最短的是时间内解决该问题,其中最重要的是我们能快速的定位到问题出现的具体代码位置,然后我们才能在最短的时间内解决,对于一些不是很重要的统计功能,我们可以先暂停该功能,首先保证主要流程正常使用,待服务恢复正常以后,我们在 优化具体的代码。

快速定位线上CPU100%原因相关推荐

  1. 前端录屏+定位源码,帮你快速定位线上bug

    前言 如何快速定位线上bug,是多数开发者都会遇到的难题 web-see 前端监控方案,提供了 前端录屏+定位源码 方式,让bug无处藏身 这是前端监控的第二篇,该篇讲解如何实现错误还原功能,第一篇 ...

  2. 抓包神器 Wireshark,帮你快速定位线上网络故障(3)

    1  复习:TCP 三次握手&四次挥手  正式分享之前,先简单复习一下 TCP 的三次握手.四次挥手. TCP 通过三次握手建立连接(一图解千愁): TCP 协议通过四次挥手断开连接(一图知所 ...

  3. 有了这款工具,定位线上问题事半功倍|云效工程师指北

    大家好,我叫刘玄,负责云效流水线的开发.程序员在日常工作中经常会遇到一些线上问题需要排查,本文的主人公程序员小张也不例外.但排查的过程却时常令他困扰不已.让我们一起看看他遇到了哪些问题,又是怎么解决的 ...

  4. 如何使用Arthas定位线上 Dubbo 线程池满异常

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「Kirito的技术分享」 前言 本文是 ...

  5. 阿里神器 Arthas 有多强?教你一招定位线上Bug!

    今日推荐 扔掉 Postman,一个工具全部搞定,真香!为啥查询那么慢?还在直接用JWT做鉴权?JJWT真香推荐 15 款常用开发工具干掉 navicat:这款 DB 管理工具才是y(永)y(远)d( ...

  6. Arthas | 定位线上 Dubbo 线程池满异常

    作者 | 徐靖峰  阿里云高级开发工程师 前言 Dubbo 线程池满异常应该是大多数 Dubbo 用户都遇到过的一个问题,本文以 Arthas 3.1.7 版本为例,介绍如何针对该异常进行诊断,主要使 ...

  7. 万字长文教你阿里问题定位神器 Arthas 的骚操作,定位线上BUG,超给力!

    长文预警!!! Arthas 是Alibaba开源的Java诊断工具.在线排查问题,无需重启:动态跟踪Java代码:实时监控JVM状态.对分秒必争的线上异常, Arthas可帮助我们快速诊断相关问题. ...

  8. 牛逼的不停服定位线上问题-arthas

    ​ Hello,大家好我是你们可爱的小花. 前言 你是不是为了生产环境问题,无法定位.无法中断.无法解决 项目无故异常,日志无报错.报错不够明确 测试环境无法复现.生产环境问题偶发 但重启项目后问题消 ...

  9. 阿里问题定位神器 Arthas 的骚操作,定位线上BUG,超给力

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | likai 来源 | https://urlify.cn ...

最新文章

  1. android 设颜色透明值
  2. U3D assetbundle打包
  3. Python 模块之科学计算 Pandas
  4. Java中List排序的3种方法!
  5. 计算机图形设计论文 真实图形生成技术的发展,绘制技术论文,关于计算机图形图像绘制技术的现状应用相关参考文献资料-免费论文范文...
  6. (桌面虚拟化最佳实践--呼叫中心系统优化之二)存储和服务器优化项目
  7. MathType几个常用字体的名称
  8. 九宫怎么排列和使用_开心数独:好友都在玩的数独九宫格小游戏,居家无聊杀时间必备!...
  9. oracle不同值,Oracle一张表中实现对一个字段不同值和总值的统计(多个count)
  10. Codeforces Round #435 (Div. 2) E. Mahmoud and Ehab and the function[二分]
  11. 搭积木php编程,Primo Toys,一款可以同时搭积木与编程的玩具
  12. 手机群控系统OpenSTF
  13. python cpk 计算
  14. 软硬件交互 - 扫码枪
  15. excel快速便捷批量填充
  16. 经典SFM步骤——Lowe2005
  17. 分析与提取QQ木马盗号技术
  18. Teams app 开发最佳实践
  19. 每日一道算法题 拿金币(蓝桥杯练习系统)简单的dp算法
  20. NVENC SDK 设置h264编码的slice划分问题

热门文章

  1. C++使用指针初始化对象
  2. 当你的Genymotion启动时报VirtualBox host-only network interface错误时
  3. 随机循环抽奖小程序_c语言,基于JavaScript实现简单的随机抽奖小程序
  4. c primer plus电子版_2019年全国大学生英语竞赛C类(NECCS)决赛试题+答案解析
  5. unity 内存释放分析
  6. 高通与华为协商专利授权费体现后者专利实力的上升
  7. 【AI大模型】物理学知识能力测试:麦克斯韦方程组爱因斯坦广义相对论 牛顿万有引力 Write out Maxwell‘s equations and explain each one.
  8. 4.1 深度学习框架-TensorFlow
  9. 使用maven管理Java项目依赖
  10. 递归代码 java_java中的递归实例代码收集大全