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

一、通过top命令定位占用cpu高的进程

执行top命令得到以下结果:

top命令查询结果

通过上图可以明显看出进程PID41843占用cpu过高,明显存在问题,定位到了进程id。当然如果你想只观察进程PID41843的CPU和内存以及负载情况,可以使用以下命令

top -p 41843

结果如下:

top -p 41843命令执行结果

这里顺便解释下上图各个参数的意义,有利于读者更好的排查问题。

1.第一行是任务队列信息
top - 14:06:34 up 537 days, 6 min, 6 users, load average: 0.41, 0.45, 0.43

2.第二行为进程的信息

3.第三行为cpu信息

4.第四、五行为内存信息。
内容如下:

二、通过top命令定位问题进程中每个线程占用cpu情况

通过问题进程中每个线程占用cpu情况使用可以使用如下命令:

top -p 41843 -H

查看进程PID41843的每一个线程占用CPU情况,如图。

top -p 41843 -H的执行结果

由上图明显可以发现,线程PID41892CPU占用率最高,接下来定位该线程的代码是否出现异常导致cpu占用过高。

三、通过jstack 命令定位问题代码

上一步发现PID41892占用的CPU过高,就将这个PID转换成16进制,易知,PID41892转化成16进制为a3a4。使用如下命令命令定位问题代码:

jstack 41892 | grep a3a4

输出如下:

"Thread" prio=10 tid=0x00007f950043e000 nid=0x54ee in test();

可以分析得到: 线程Thread下的wait()函数cpu使用率很高,查看源代码中的test()函数代码如下:

 public void test(){
while(true){
for(int i = ;i<;i++);
}
}

while循环无法结束,一直抢占cpu,导致程序cpu使用过高,修改代码即可。
到此为止,因为代码问题导致的cpu使用过高的故障排查方法就介绍完了。

由于内存的原因,频繁的GC,也可能导致cpu使用过高。

线上cpu使用率过高解决方案的更多相关文章

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

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

  2. 《Troubleshooting SQL Server》读书笔记-CPU使用率过高(上)

    第三章 High CPU Utilization. CPU使用率过高问题很容易被发现,但是诊断却不是很容易.CPU使用过高很多时候会成为其它问题的替罪羊,所以在确认和故障诊断时要抽丝剥茧. 调查CPU ...

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

    一次线上CPU高的问题排查实践 前言 近期某一天上班一开电脑,就收到了运维警报,有两台服务CPU负载很高,同时收到一线同事反馈 系统访问速度非常慢,几乎无响应. 一个美好的早晨,最怕什么就来什么.只好 ...

  4. 《Troubleshooting SQL Server》读书笔记-CPU使用率过高(下)

    <Troubleshooting SQL Server>读书笔记-CPU使用率过高(下) 第三章 High CPU Utilization. CPU使用率过高的常见原因 查询优化器会尽量从 ...

  5. 排查tomcat服务器CPU使用率过高

    tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是因为部署的web程序的问题. 一.现象描述 在一次线上环境,前台访问页面的速度越来越慢,从浏览器F12中看到发出的请求都是 ...

  6. 服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况# mpstat -P ALL 2 1Linux 2.6.32-358.el6.x86_64 (linux— ...

  7. Oracle查询语句导致CPU使用率过高问题处理

    解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...

  8. 空循环导致CPU使用率很高

    业务背景 业务背景就是需要将多张业务表中的数据增量同步到一张大宽表中,后台系统基于这张大宽表开展业务,所以就开发了一个数据同步工具,由中间件采集binlog消息到kafka里,然后我去消费,实现增量同 ...

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

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

随机推荐

  1. jQuery操作元素对象的样式

    在jQuery中操作元素为了加快速度,或者书写速度,可以用到json的格式: <!DOCTYPE html> <html> <head> <meta char ...

  2. [TimLinux] JavaScript 判断 input checkbox选中的方法

    1. input属性 <label> <span>选择</span> <input type="checkbox" name=" ...

  3. goal

    线段树进阶,主席树,莫队,相似kmp,悬线,单调栈,单调队列,ac自动机,后缀数组,后缀自动机 图论:最短路,差分约束,二分图,网络流,连通分量 不学图论了我太难了   三分找,单调增+max+单调减 ...

  4. 无向图的桥+搜索优化--UESTC1956-北极的猴子

    北极的猴子 Time Limit: 1000 MS     Memory Limit: 256 MB Submit Status 也许你不知道,在北极也有猴子,我们叫它们北极猴.北极猴们在北极一共有n ...

  5. 【React】360- 完全理解 redux(从零实现一个 redux)

    点击上方"前端自习课"关注,学习起来~ 前言 记得开始接触 react 技术栈的时候,最难理解的地方就是 redux.全是新名词:reducer.store.dispatch.mi ...

  6. 【MyBatis】配置文件提示

    [MyBatis]配置文件提示 官方帮助文档:http://www.mybatis.org/mybatis-3/zh/index.html config配置 http://mybatis.org/dt ...

  7. struct socket结构体详解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weiguozhihui.blog.51cto.com/3060615/15852 ...

  8. 蝉知CMS5.6反射型XSS审计复现

    0x00 源起 最近在深入学习反射XSS时遇到蝉知CMS5.6反射型XSS这个案列,乍一看网上的漏洞介绍少之又少,也没有详细的审计复现流程.虽然是17年的漏洞了,不巧本人正是一个喜欢钻研的人.这个CM ...

  9. keras模型保存和权重保存

    模型保存和读取(包括权重): model.save('./model.h5') from keras import models model = models.load_model(./model.h ...

  10. ssh服务介绍及配置

    一.ssh介绍 1.什么是 ssh ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议.ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性.利 ...