摘自:

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

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

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

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

top -p 41843

结果如下:

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

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

任务队列信息 含义

14:06:34 当前时间

537 days 系统运行时间

6 min 用户在线时间

6 users 在线用户数

load average: 0.41, 0.45, 0.43 系统负载,即任务队列的平均长度。1分钟前、5分钟前、15分钟前平均负载

2、 第二行为进程的信息

进程信息 含义

Tasks: 1 total 进程总数

0 running 正在运行的进程数

1 sleeping 睡眠的进程数

0 stopped 停止的进程数

0 zombie 僵尸进程数

3)第三行为cpu信息

cpu信息 含义

6、1% us 用户空间占用CPU百分比

1、5% sy 内核空间占用CPU百分比

0、0% ni 用户进程空间内改变过优先级的进程占用CPU百分比

92、2% id 空闲CPU百分比

0、0% wa 等待输入输出的CPU时间百分比

0、0% hi 硬件中断

0、0% si 软件中断

0、0%st 实时

4)第四、五行为内存信息。

物理内存信息 含义

Mem: 191272k total 物理内存总量

173656k used 使用的物理内存总量

17616k free 空闲内存总量

22052k buffers 用作内核缓存的内存量

交换区信息 含义

Swap: 192772k total 交换区总量

0k used 使用的交换区总量

192772k free 空闲交换区总量

123988k cached 缓冲的交换区总量

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

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

top -p 41843 -H

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

由上图明显可以发现,线程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()函数代码如下:

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

注: top -H 切换在进程列表中显示所有线程信息。

linux 内核空间占用cpu百分比过高,线上linux系统故障排查之一:CPU使用率过高相关推荐

  1. linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  2. linux 内核空间与用户空间 简介

    本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space). 内核空间和用户空间 对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4 ...

  3. linux kernel and user space通信机制,Linux内核空间与用户空间通信机制地研究.doc

    实用文案 标准文档 Linux内核空间与用户空间通信机制的研究 Linux kernel space and user space communication mechanism 摘 要 Linux ...

  4. Linux 基础知识(2)---Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别

    Linux内核空间内存申请函数kmalloc.kzalloc.vmalloc的区别 kzalloc与kmalloc区别    这个函数就是原来的两个函数的整合 , 即原来我们每次申请内存的时候都会这么 ...

  5. linux内核空间内存动态申请

    参考:<linux设备驱动开发详解>华清远见 ,--人民邮电出版社 用户空间内存动态申请 在用户空间动态申请内存的函数为 malloc(),这个函数在各种操作系统上的使用是一致的,mall ...

  6. Linux内核争抢式并发在SMP多核扩展上的不足

    本文来自:<被神话的Linux, 一文带你看清Linux在多核可扩展性设计上的不足> 我们先来看一段来自猛士王垠的话: 跟有些人聊操作系统是件闹心的事,因为我往往会抛弃一些术语和概念,从零 ...

  7. 线上应用故障排查之二:高内存占用

    为什么80%的码农都做不了架构师?>>>    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2 ...

  8. Java线上应用故障排查之二:高内存占用

    前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查. 搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGe ...

  9. Java线上应用故障排查之一:高内存占用

    Java线上应用故障排查之一:高内存占用 转载地址:http://www.blogjava.net/hankchen 搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMe ...

最新文章

  1. 数据仓库数据模型之:极限存储--历史拉链表
  2. Redis生产环境架构选型方案对比
  3. 谷歌小姐姐开源姿势动画师项目,组合现有TF模型,只需一张SVG图片便可配置...
  4. UVALive 4035 - Undetectable Tour(并查集)
  5. Android复习13【广播:思维导图、音乐播放器】
  6. 算法9-5:最大流算法的Java代码
  7. 一个想法:成立草根技术联盟对开发人员进行技术定级解决企业员工招聘难问题!...
  8. 数据结构与算法--图论-深度优先搜索及其应用
  9. P3311-[SDOI2014]数数【AC自动机,dp】
  10. 生成报告配置xml_升职加薪利器:Python+Pytest框架在Jenkins上生成Allure测试报告
  11. MYSQL到ORACLE法式迁徙的注意变乱
  12. c#样条曲线命令_C#绘制由点定义的贝塞尔样条曲线
  13. 机械硬盘和固态硬盘区别 机械硬盘和固态硬盘哪个好
  14. 加州房价--决策树与随机森林
  15. H5页面input输入框,在ios手机中被顶出页面解决方案
  16. Leetcode广度优先搜索笔记2 腐烂的橘子
  17. Python魔法函数与两比特量子系统模拟
  18. >>技术开发:轻量级BI工具Superset
  19. js判断当前电脑是否安装flash插件
  20. 一起做RGB-D SLAM(3)

热门文章

  1. 聊一聊Go中的GMP调度模型
  2. STM32CudeIDE:串口发送汉字乱码
  3. 机器学习与大数据基础知识(二)
  4. TCP粘包和拆包问题及其解决方法
  5. R语言线性混合效应模型(固定效应随机效应)和交互可视化3案例
  6. 3DMAX砖墙神器WallBuilder:快速生成常见砖墙插件教程
  7. 作为测试人员如何写简历
  8. python可以用来写什么_python这么火,到底可以用来做什么?
  9. HP笔记本中CQ4x系列,在XP下的未知设备与声卡设备驱动
  10. 详解 CSS3中最好用的布局方式——flex弹性布局(看完就会)