线上服务器CPU负载过高的问题解决过程

一.找到CPU占用过高进程

执行top命令,发现PID为12443的Java进程占用CPU高达350%,出现故障。

二.定位具体线程或代码

找到该进程后,接下来要定位具体的线程或代码。首先我们使用如下命令来显示线程列表,并按照CPU占用高的线程排序:

[root@localhost logs]# ps -mp  12443 -o THREAD,tid,time | sort -rn

显示结果如下:

USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
root     10.6  17    - -         -      -  1838 10:12:20
root     10.2  17    - -         -      -  3223 10:12:16

找到了耗时最高的线程1838,占用CPU时间有12分钟了!

或者使用 top -Hp pid(shift+p 按cpu排序,shift+m 按内存排序)命令来定位:

top -Hp 8958

获取到这个进程下面所有线程,通过查看%CPU找到最耗费CPU的是线程PID

将需要的线程ID转换为16进制格式:

[root@localhost logs]# printf "%x\n" 1626
e18

最后打印线程的堆栈信息:在执行 jstack -l [PID] > /tmp/output.txt 之后可以对 /tmp/output.txt 进行分析

开头交代当前 dump 的时间和 JVM 基本信息

2019-06-12 16:13:06
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.152-b16 mixed mode):

接下来就是程序的线程信息

"JetCacheHeavyIOExecutor3" #85 daemon prio=5 os_prio=0 tid=0x00007f76a93ab800 nid=0x1c47a waiting on condition [0x00007f7696acb000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000000c9863140> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None

将输出的信息进行匹配就能找出有问题的代码。

线上服务器CPU负载过高的问题解决过程相关推荐

  1. 原创|面试官:线上服务器CPU占用率高如何排查定位问题?

    国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下: 排名前几的比较受重视的能力分别为:解决问题 ...

  2. 服务器cpu占用率高怎么解决,线上服务器CPU占用率高怎么办?

    如果线上服务器发生CPU占用率高时,应该如何排查并定位问题. 1.问题发现 本文整理自一个真实的案例,是楼主负责的业务,在一次大促之前的压测时发现了这个问题. 在每次大促之前,我们的测试人员都会对网站 ...

  3. 服务器定位cpu高占用率代码php,面试官:线上服务器CPU占用率高如何排查定位问题?,...

    面试官:线上服务器CPU占用率高如何排查定位问题?, 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果 ...

  4. 面试官:线上服务器CPU占用率高如何排查定位问题?

    开发十年,就只剩下这套架构体系了!! 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下:  ...

  5. 线上服务器CPU占用率高如何排查定位问题?

    (关联着看看这篇文章:https://blog.csdn.net/u011277123/article/details/103768939) 解决问题的能力以超高比例排名第一,这也是为什么很多面试过程 ...

  6. 线上服务器CPU占用过高?7步带你搞定

    一. 前言 在Java开发岗位的面试中,时不时会出现一些运维类的题目,其实这也反映了后端面试的一种趋势.现在企业对后端开发的要求越来越全面,不仅要求我们会写代码,还要我们能够进行部署和运维. 今天壹哥 ...

  7. 记录一次线上CPU负载过高的排查过程

    背景 一大早收到运维同学反馈.线上某台机器cpu的负载达到了97%以上,为了不影响机器上服务的正常运行,急需找到导致负载过高的原因并将负载降到合理的区间. 用到命令 top/uptime:查看负载情况 ...

  8. 一次线上服务器cpu使用率超过1250%的排查与优化

    项目背景: 将35家海外酒店的房型数据通过40个定时任务同步到本地mongodb,这里用了5台服务器来部署项目,mongodb采用分片集群部署.定时任务采用lts,一个小时同步一次所有数据.项目中用多 ...

  9. 线上告警CPU使用率过高排查分析

    本文主要列举了如下几种可能造成CPU过高的场景进行排查分析. 1.代码死循环 启动了两个线程(线程一定要起一个合适的名称,出了问题时方便排查),一个线程空循环,一个线程每500ms循环一次. publ ...

最新文章

  1. 限免!百名AI大咖,20大技术和行业论坛,不可错过的开发者嘉年华
  2. python---简单的接口测试实例
  3. 韦布望远镜现在到哪儿了:距离地球60万公里,NASA还说可以用10年
  4. C#操作Access数据库中遇到的问题(待续)
  5. Centos换源 加快软件安装速度 2021-03-17
  6. GridView 控件的执行顺序
  7. java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘
  8. Linux学习-15-学习LVM逻辑卷
  9. 阿里工程师是如何系统化地总结缓存相关知识的
  10. matlab中count是干什么,matlab编程潮流计算的count值与什么有?
  11. python qt库,用于 Python 的高级 GUI 库(Qt 和 PyQt)(1)Unix系统 -电脑资料
  12. 码云怎么创建公开的仓库_使用码云创建属于你的免费私有git仓库
  13. 微信小程序 图片长按识别功能 笔记
  14. 一年工作经验,两周的面试,拿到几个offer的面试经验总结
  15. 特惠快车和快车的区别,滴滴特惠快车老司机说了实话?
  16. C语言真的太强大了,C几乎无处不在!
  17. 拍卖系统业务演进过程(一)
  18. java中文乱码终极解决方案
  19. Ghost11、Acronis12和贝壳还原3.0.8的测试对比报告
  20. 如何显示计算机中本地用户和组,win10电脑管理界面如何显示出“本地用户和组”功能...

热门文章

  1. TCP/IP卷一:49---ICMP之(与ICMP相关的攻击)
  2. 关于SOT-89-3封装的线性稳压器LDO的大坑
  3. API接口幂等性设计
  4. 合金装备幸存官网服务器维修,合金装备幸存联机要注意什么_联机注意事项分享_3DM单机...
  5. 圆管当量直径_非圆形管道当量直径的计算公式为:de=4A/X。式中X表示( )
  6. 破解入门(二)-----认识OllyDBG
  7. 【小米春招】小米22届春招、23届实习生内推【全岗位】
  8. 如何从零开始学习Ruby
  9. Oracle导出空(无数据)表
  10. Nagiosxi的一个RCE漏洞利用脚本