当前位置: 首页 > news >正文

Ubuntu 20.04 进程占用 100% CPU 如何使用 perf 定位热点函数?

在 Ubuntu 20.04 上遇到进程 CPU 占用率飙升至 100% 时,最推荐的做法是先通过 top 确认进程 ID,再使用 perf record 采集采样数据,最后通过 perf report 查看热点函数调用栈。

先说结论:perf 是 Linux 内核自带的性能分析工具,适合在生产环境低开销地定位 CPU 热点,但需要确保内核版本与工具版本匹配。

  • 先定位:确认具体是哪个进程和线程占用 CPU,避免误杀正常高负载业务。
  • 先做:安装与当前内核版本一致的 linux-tools 包,使用 perf record 采集调用栈。
  • 再验证:根据热点函数优化代码或配置后,观察 CPU 负载是否回落。

命令速用版

以下命令假设你已经知道目标进程的 PID,例如 12345。

# 1. 安装 perf 工具(需匹配当前内核版本)
sudo apt update
sudo apt install linux-tools-generic linux-tools-$(uname -r)# 2. 确认进程 ID 和占用最高的线程top -H -p 12345# 3. 采集 30 秒的性能数据(-g 表示记录调用栈)
sudo perf record -p 12345 -g -- sleep 30# 4. 查看分析报告
sudo perf report

为什么会这样

当某个进程 CPU 占用达到 100%(通常指单核满载)时,说明该进程正在密集执行计算任务或陷入死循环。操作系统调度器虽然能切换任务,但无法告诉你是哪行代码在空转。perf 基于硬件事件采样(如 CPU 时钟周期),每隔固定时间记录一次当前执行的指令指针,累积足够样本后就能统计出哪些函数占用了最多的 CPU 时间片。相比 strace 等追踪系统调用的工具,perf 对用户态代码的内部逻辑可见性更好,且开销通常在 5% 以内,适合线上临时排查。

分步处理

第一步:确认目标进程
使用 top 命令找到 CPU 占比最高的进程 PID。如果是因为某个线程导致,按 top 界面中的 H 键开启线程视图,找到占用最高的线程 ID(TID)。

第二步:安装匹配的工具
Ubuntu 20.04 默认可能未安装 perf 或版本不匹配。运行 uname -r 查看内核版本,确保安装的 linux-tools 包版本与之对应。如果版本不一致,perf record 可能会报错提示 kernel map 失败。

第三步:采集数据
执行 sudo perf record -p <PID> -g -- sleep 30。这里 -p 指定进程,-g 记录调用图,sleep 30 控制采集时长。生产环境建议控制在 30-60 秒,避免生成过大的数据文件。

第四步:分析报告
运行 sudo perf report 进入交互式界面。按百分比排序,找到占用率最高的函数符号。如果是业务代码符号,直接定位源码;如果是库函数或内核函数,结合日志分析是否涉及锁竞争或系统调用。

怎么验证是否生效

优化代码或配置后,重启服务并观察监控面板。使用 top -p <PID> 再次查看 CPU 占比,确认是否从 100% 降至正常水平。同时检查应用日志,确认没有因优化引入新的错误或延迟。公开资料中没有看到可靠的量化数据表明 perf 本身能降低 CPU,它只是定位工具,效果取决于后续的代码修复。

常见坑

1. 权限不足:perf 需要 root 权限或配置 /proc/sys/kernel/perf_event_paranoid 参数,否则无法采集内核态数据。
2. 符号缺失:如果报告显示大量十六进制地址而非函数名,说明缺少调试符号。对于自有代码,编译时请加上 -g 参数。
3. 生产影响:虽然 perf 开销小,但在极高负载下仍可能加剧竞争。建议在业务低峰期操作,或先在测试环境复现。
4. 内核 mismatch:Ubuntu 升级内核后,旧的 linux-tools 可能失效,需重新安装对应版本工具包。

参考来源

  • Ubuntu Manpages, "perf-record - Create a perf.data file for later analysis", https://manpages.ubuntu.com/manpages/focal/man1/perf-record.1.html
  • Ubuntu Manpages, "perf-report - Read perf.data (created by perf record) and display the profile", https://manpages.ubuntu.com/manpages/focal/man1/perf-report.1.html
  • Linux Kernel Documentation, "perf tools", https://www.kernel.org/doc/html/latest/admin-guide/perf.html

原文链接:https://www.zjcp.cc/ask/10847.html

http://www.jsqmd.com/news/798000/

相关文章:

  • 避开这些坑!用STM32 CubeMX配置SPWM生成时,死区时间与互补输出怎么设才对?
  • 终极显卡驱动清理方案:Display Driver Uninstaller完全使用指南
  • Qt WebEngine(02):从架构到实战,构建现代桌面Web混合应用
  • 互换性-即通用性-互换性是指在统一规格的一批零件或部件中,任取其一,不经任何挑选、修配或调整就能进行装配,并能满足预定使用性能要求的特性,它是现代工业实现专业化协作生产、提高效率、保证质量与降低成本的
  • 终极指南:5个简单步骤实现本地视频字幕提取,告别手动转录
  • 2026培育钻品牌哪家值得推荐?婚戒、悦己、送礼三大场景综合测评,选对“本命钻” - 企业推荐官【官方】
  • 从玩具车到智能体:用STC89C52给小车装上‘眼睛’和‘触角’的传感器融合实战
  • Systemback不只是备份:手把手教你修复Ubuntu启动项(GRUB)和fstab文件
  • Ubuntu16.04高效桌面管理全攻略:多工作区、分屏与终端Terminator进阶技巧
  • 终极指南:如何用FFXIV TexTools打造个性化FF14游戏体验
  • 防脱生发加盟品牌哪家靠谱?6大选择要点+真实案例解析 - 企业推荐官【官方】
  • Cadence焊盘绘制实战:从零到一构建PCB封装基石
  • 极域课堂管理系统有免费破解版吗?
  • 2025-2026年电商园区核定公司联系电话推荐:企业财税规划参考 - 品牌推荐
  • AI智能体如何通过MCP协议安全赋能终端自动化
  • HsMod终极指南:55项功能全面优化炉石传说游戏体验的完整方案
  • C++项目集成Tesseract 5.x踩坑实录:从编译选项到内存管理的完整避坑指南
  • 2025-2026年电商园区返税联系电话推荐:靠谱选择与联系须知 - 品牌推荐
  • 终极VisualCppRedist AIO运行库解决方案:一键修复Windows软件启动失败问题
  • 终极泰坦之旅仓库管理指南:告别背包爆满,开启无限存储新时代
  • 上海辉洋晟再生资源|工业物资回收_电线电缆_厂房设备拆除回收介绍 - 海棠依旧大
  • 如何彻底清理显卡驱动残留:Display Driver Uninstaller专业指南
  • 暗黑破坏神2存档编辑器:3步掌握d2s-editor的终极修改指南
  • 《赛前冲刺:准备答辩与演示视频》
  • 20252133 实验二 计算器设计
  • Hive内部表 vs 外部表:选错一次,数据全丢?结合HDFS路径详解核心区别与选型指南
  • 用AI写论文怎么不被判AI?写作prompt+降AI工具双层防御攻略!
  • 怎样从零构建高性能Voron 2.4 3D打印机:5个专业技巧全解析
  • 从像素到画面:深入解读VESA时序如何驱动1080P高清显示
  • 知识库自动化 - 微信文章自动同步与AI编译系统