相信很多C++程序员都经历程序占用cpu过高的问题,这种问题,如果对代码运行逻辑足够熟悉,只靠脑子想估计定位起来也不难,但是如果是调用第三方sdk,或者团队其他人开发的库导致的cpu占用居高,就不那么容易定位了。

如何确定程序cpu占用情况?

这个非常简单,一条命令搞定,top -p 进程pid,这样就可以:

这样就可以持续的观察你的程序的cpu占用情况,如果一直居高不下,就可能是有问题了。‍‍从图中可以看到%CPU为98.0,这已经非常非常高了。

如何查看线程级别的cpu占用情况?

方法一:

命令:

ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu | grep 进程号

这个比较长,理解一下也不难记忆,这里我们可以看到用户、进程号、父进程号、线程号、cpu占用总时长、cpu占用率、程序名。按照cpu的值进行了升序排列,最后一个即为占用cpu最高的线程,这样就可以找到对应线程号。

图中第4列就是线程号,第5列是cpu占用时长,第6列是cpu占用率,可以看到54313线程占用CPU最高。

方法二:

命令:

top -H -p 进程号-H  :Threads-mode operation
-p  :Monitor-PIDs

这个就很好记了,推荐用这个!一目了然,动态显示各个线程的cpu占用情况,很容易找出最高的那个。

‍‍图中%CPU列很清晰的列出了cpu的占用状况,也可以看出54313线程占用cpu最高。

细心的同学发现了,为什么这两种方法得到的数据不一样?莫非不对?其实都是对的,只是计算用的数据不同,top得到的是瞬时的cpu占用率,top数据默认3秒刷新一次,所以计算的是这3秒内线程占用CPU时长占比,而ps计算的是从启动到现在的一个时长占比,运行时间越长,就会趋近于某个固定值,感兴趣的同学可以了解一下cpu占用率的算法。

如何将问题定位到代码行级别?

通过上面的操作我们已经找到了那个搞事情的线程,但是线程长得都一个鬼样子,我们只能看到一个代表它的数字,此时需要一个建立一个线程号与具体代码的映射关联,那么就需要用到这几个查看堆栈信息的强大工具了。

gstack/pstack(c/c++程序)

命令:

gstack/pstack 进程号

这两个其实一个工具,pstack是gstack的软连接而已。

Linux下排查进程占用cpu高的问题相关推荐

  1. Linux下JAVA线程占用CPU高的分析方法

    2019独角兽企业重金招聘Python工程师标准>>> 上次分析系统中占用CPU高的问题,得到一些使用Java自身调试工具的经验,与大家分享.  (1)使用top命令找出占用cpu最 ...

  2. linux系统gpk-update-icon进程占用CPU资源100%

    1. 症状:linux系统gpk-update-icon进程占用CPU资源100%,监控到用户进程跑到100% 2.原因分析: gpk-update-icon进程在GUI模式下会自动通知rpm软件包更 ...

  3. win10系统system进程占用cpu高怎么解决

    Win10系统经常发现任务管理器中的system进程占用了很高的cpu内存,一直在50%左右,这也导致了多项应用程序运行卡顿,本人是家庭激活版本,也在网上搜索win10系统system进程占用cpu高 ...

  4. linux下查看进程占用端口和端口占用进程命令

    Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端 ...

  5. linux下java进程占用高问题分析过程

    2019独角兽企业重金招聘Python工程师标准>>> 1.用top命令找出占用cpu高的进程,记录下pid 2.用top -H -p pid(上面的pid)查看该进和下各线程占用c ...

  6. java gc占用cpu问题_Java进程占用CPU高的问题跟踪

    http://www.cublog.cn/u/12331/showart_255325.htmlWebLogic高cpu消耗诊断一例故障分析报告故障描述2007-3-6日上午,在系统监控时发现WebL ...

  7. linux下查看java 占用cpu使用情况

    使用top命令,查看cpu占用过高的java PID (如PID=9876) 使用ps aux|grep PID   (ps aux|grep 9876)查看是那个java程序占用cpu . ps - ...

  8. linux中systemd进程占用cpu,linux systemd 进程cpu 打满解决

    首先看到2个进程都是systemd 的100% 我都吃惊了.还以为中毒了 然后尝试用命令查看 cd /proc/17627 && ls -la查看CPU占用高的进程正在干什么 cd / ...

  9. 隐藏进程占用cpu高

    使用uptime和top 可以看到cpu的使用率高,但是看不到占用的进程 查看文件发现很多文件被上了特殊权限.基本可以确定服务器被黑了 先使用lsattr查看权限,再用chattr解除权限 挖矿修改了 ...

最新文章

  1. Confluence 6 如何保持我空间的整洁
  2. 网页版登录入口_企业微信网页版怎么登录?企业微信客户端和网页版有什么区别?...
  3. php root 启动,php-fpm如何以root身份启动
  4. 知识点 - python 类的私有/保护 属性和方法
  5. 独家下载!《零售数据中台通关指南》,带你玩转新零售
  6. P2664 树上游戏
  7. Sentinel(十四)之控制台
  8. [Linux]Ubuntu下用apt-get安装的应用程序位置
  9. 月薪一万在石家庄能过什么样的生活?
  10. VBA员工出差管理系统(上)
  11. OpenDDS架构说明
  12. Speedoffice(Excel)怎么把边框线条加粗
  13. java 读取 excel 科学计数
  14. b类 蚂蚁金服_终于拿到蚂蚁金服Offer!!!分享一下全程面试题和面试经验!...
  15. coremail服务器无响应,icoremail邮箱系统 邮件收发常见问题|创思Chance
  16. Android云手机平台搭建-2020圈钱热潮
  17. 2点直线方程 + 3点平面方程
  18. java学习心路历程
  19. iphone 计算机找不到了,电脑找不到苹果手机热点
  20. Java——将一个正整数分解质因数

热门文章

  1. linux下,ssh服务安装和法git简单的使用方,整理实测。
  2. java中Vector
  3. 六大Web负载均衡原理与实现
  4. [系统安全] 四十四.APT系列(9)Metasploit技术之基础用法万字详解及防御机理
  5. 【数据结构与算法】之深入解析“插入区间”的求解思路与算法示例
  6. 【数据结构与算法】之深入解析“石子游戏IX”的求解思路与算法示例
  7. iOS经典面试题之深入分析block相关高频面试题
  8. Ubuntu下安装pip
  9. 【Tools】Navicat Premium12安装教程
  10. 【Linux】一步一步学Linux——uptime命令(76)