一次线上CPU高的问题排查实践

前言

近期某一天上班一开电脑,就收到了运维警报,有两台服务CPU负载很高,同时收到一线同事反馈 系统访问速度非常慢,几乎无响应。

一个美好的早晨,最怕什么就来什么。只好推掉其他会议,专心搞定问题。

排查

登录系统一看,后端的接口访问果然全部超时。

  1. 先使用top命令查看下是由哪个进程占用CPU较高。

从图上可看出,pid=26481的Java进程占用了385%的CPU,机器是4核8G的配置。

2.然后查看下是哪个Java应用 ps -ef | grep java

发现是我们后端request服务的应用。

3.获取pid后,可以查看该进程下的线程列表。 命令: ps -mp pid -o THREAD,tid,time。

.png)

这里我们可以看出有4个线程,长时间占用较高的CPU资源。拿到一个tid=26496,printf "%x\n" tid , 转为16进制:6780

4.使用jstack打印线程的堆栈信息,./jstack pid | grep tid -A 30

从图上可看出,是由于该应用的GC异常导致CPU占用较高。

5.导出堆栈日志分析。 jstack 26481 >> jstat.out

解决问题

分析导出jstat.out,查找下RUNNABLE状态的线程。

ps:这里推荐一个分析日志的网站,超级好用,能生成图形界面的分析日志。只需要将生产的日志上传。Java Thread Dump Analyzer https://fastthread.io/

最终发现是Excel大量导出的问题。用户导出一年的财务报表,差不多近60万条数据,由于系统导出较慢,然后进行了多次点击下载,导致应用内存不足,频繁GC, 导致CPU超高,系统假死。

至此问题发现,解决问题就变得简单了。

  • 重启应用,让用户使用优先。 最快捷、最有效的解决方式,哈哈
  • 前端限制按钮点击次数。
  • 后端Excel下载优化(考虑阿里的easyexcel,详细请看后续分享),以及将文件下载独立出一个微服务。

一次线上CPU高的问题排查实践的更多相关文章

  1. 线上CPU飙升100%问题排查

    本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考 ...

  2. 线上CPU飙升100%问题排查,一篇足矣

    一.引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高. 二.问题复现 线上系统突然 ...

  3. java线上cpu、内存问题排查方法

    一.线程 查进程中占用cpu高的线程 ps -mp xxxxx -o THREAD,tid,time | sort -rn 将线程的id从10位转到16位,可以在下面jstack中找到对应线程 输出线 ...

  4. 你要偷偷学会排查线上CPU飙高的问题,然后惊艳所有人!

    GitHub 20k Star 的Java工程师成神之路,不来了解一下吗! GitHub 20k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 20k Star 的Java工 ...

  5. 一次线上服务高 CPU 占用优化实践 (转)

    线上有一个非常繁忙的服务的 JVM 进程 CPU 经常跑到 100% 以上,下面写了一下排查的过程.通过阅读这篇文章你会了解到下面这些知识. Java 程序 CPU 占用高的排查思路 可能造成线上服务 ...

  6. 线上cpu使用率过高解决方案

    一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 下面我们将一步步定位问题,详尽的介绍每一步骤的相关知识. 一.通过top命令定位占用cpu高的进程 执行top命令得到 ...

  7. 线上Redis高并发性能调优实践

    项目背景 最近,做一个按优先级和时间先后排队的需求.用 Redis 的 sorted set 做排队队列. 主要使用的 Redis 命令有, zadd, zcount, zscore, zrange ...

  8. 一次性搞清楚线上CPU100%,频繁FullGC排查套路

    “ 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题. 当然,这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统 ...

  9. 线上Redis偶发性链接失败排查记

    问题过程 输入法业务于12月12日上线了词库接受业务,对部分用户根据用户uuid判断进行回传,在12月17日早上8点多开始出现大量的php报错(Redis went away),报错导致了大量的链接积 ...

随机推荐

  1. Java基础笔记(十六)——继承

    继承 提取出一些共性特征,作为父类,子类就可以继承父类的这些开放成员,子类再添加自己独有的属性和方法.如果再有类具有这些共同特征,也可继承这个父类. 特点:1.利于代码复用     2.缩短开发周期 ...

  2. css3中的变形(transform)、过渡(transtion)、动画(animation)

    Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一 ...

  3. 练习三十八:矩阵for循环应用

    习题如下: 求一个3*3矩阵对角线元素之和 利用for循环控制输出二维数组,再将a[i][j]累加后输出 a = [] sum1 = 0.0 for i in range(3): a.append([ ...

  4. LeetCode 179 Largest Number 把数组排成最大的数

    Given a list of non negative integers, arrange them such that they form the largest number.For examp ...

  5. mediawiki登录时第一次会跳回登录页面,第二次才能登录成功

    原因是:LocalSetting.php中的$wgServer属性使用的是ip,改为域名后成功解决问题 补充:改为域名后使用ip访问会出现第一次登录跳回登录界面的情况,应该根据实际情况来设置$wgSe ...

  6. arch安装问题总结

    安装 archLinux 的时候遇到的一些问题,记录下来方便以后安装. 1.fcitx 在设置/etc/locale.conf文件时,中文不能写成zh_CN.utf-8,而是要写成zh_CN.utf8 ...

  7. Java微信公众平台开发(十)--微信用户信息的获取

    前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关 ...

  8. [PHP]使用日志进行调试

    两种方法: 1.利用自定义函数: //写日志,打印字符串function writelog($str){ $open=fopen("log.txt","a+") ...

  9. jsp内置对象和el表达式内置对象误区

    未经允许禁止转载... jsp九大内置对象 EL表达式隐含的11个对象 隐含对象名称 描       述 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageC ...

  10. wamp 下运行Drupal慢的解决方法

    1.Editing your php.ini and make realpath_cache_size=2M, 2.uncomment skip innodb in your my.cnf(my.in ...