【Linux top】CPU占用率过高问题排查

本文详细介绍在Linux环境下,如何使用top命令排查CPU占用率过高的问题,包括页面分析、定位问题线程以及使用gdb进行调试,展示了通过infothreads和threadapply进行堆栈追踪的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

前面几篇文章介绍了现阶段掌握的windows下排查cpu过高的手段,因本身职能为跨平台开发,这边总结下Linux下的几种方法:1.通过top命令进行排查 2.通过perf工具进行排查。本文主要对top命令进行总结。

【debug问题点】:CPU占用率过高问题排查
【环境】:Linux
【使用工具】:top命令

二、问题单

待提交

三、问题分析

3.1、top页面分析

页面分析:
1.在这里插入图片描述
当前系统时间 / 系统运行时间 / 当前有2个用户登录系统 / load暂未研究

2.在这里插入图片描述
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DAT
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

3.2、定位问题线程

在这里插入图片描述
通过1来查看每个核的使用情况,找到cpu使用率最高的进程,如下图:
在这里插入图片描述

然后使用 top -H -p 进程号 查看异常线程,通过%CPU找到存疑线程,后续需要通过这边怀疑的线程id进行分析:
在这里插入图片描述

3.3、gdb调试

因保密机制,只提供命令行调试流程:
在这里插入图片描述
上图中info threads命令行正常应该会出现线程信息。然后我们可以通过3.2步骤中定位到的存疑线程id,通过thread apply 线程id bt查看该线程的堆栈信息,最后通过走读代码逻辑进行分析。

原理介绍:
info threads:查看线程关系
thread apply 线程PID bt:查看占用CPU高的线程堆栈

四、优化方法

待提交

五、总结

待提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值