进程管理中怎么使用perf工具对生产环境高负载进程进行火焰图(Flame Graph)生成与性能调优

浅萱大大_8282

浅萱大大_8282

2026-07-22

828人浏览

原创

核心是“采样准、栈完整、符号全、干扰小”:需精准绑定pid轻量采样(-f 99、cpu-clock、--call-graph dwarf),确保二进制含-g调试信息及内核符号就位,用--all保留全栈,本地生成svg后通过/搜索和点击聚焦定位真实瓶颈。

进程管理中怎么使用perf工具对生产环境高负载进程进行火焰图(flame graph)生成与性能调优

直接对生产环境高负载进程做火焰图分析,核心是“采样准、栈完整、符号全、干扰小”。不能停服务、不能大幅拖慢业务,关键在控制采样开销和确保调用栈可读。

精准定位目标进程并轻量采样

避免全局采集(-a)带来的系统扰动,优先绑定具体 PID:

  • pgreppidof 快速获取进程 ID,例如:pgrep -f "nginx: worker"pidof java
  • 采样命令加 -F 99(非默认 1000 Hz),避开硬件中断对齐,降低抖动;用 cpu-clock 替代 cycles,更稳定反映真实 CPU 占用
  • 单次采样建议 20–60 秒,命令示例:sudo perf record -e cpu-clock -g --call-graph dwarf -F 99 -p 1234 -- sleep 30
  • 若进程短时爆发(如毛刺型 CPU 尖峰),可临时提频至 -F 999,但需确认磁盘 I/O 和 perf.data 写入压力可控

确保调用栈不截断、函数名不显示 [unknown]

火焰图中大量 [unknown] 意味着符号解析失败,不是图没画好,而是数据缺关键信息:

千鹿Pr助手
千鹿Pr助手

一款AI视频创作工具,主要用于智能Pr插件,融入众多AI功能和海量素材,适合需要提升相关任务效率的用户。

下载
  • 用户二进制必须含调试信息:file your_binary 应显示 “with debug_info”;编译时务必加 -g,C/C++ 避免 strip,Java 需启用 -XX:+PreserveFramePointer--perf-basic-prof,Node.js 同理
  • 内核符号要就位:sudo cat /proc/kallsyms | head -3 有输出才表示已加载;缺则安装对应 linux-image-$(uname -r)-dbgsym(Ubuntu)或 kernel-debuginfo(RHEL/CentOS)
  • 对多线程或内核路径敏感的问题,务必加 --all 参数:用 perf script | ./stackcollapse-perf.pl --all > out.folded,保留 sys_read→ext4 等关键内核路径,否则可能漏掉 I/O 瓶颈源头

本地生成火焰图并快速聚焦瓶颈

把 perf.data 拷回开发机处理,既安全又灵活:

  • scp user@prod:/path/perf.data ./ 拉取原始数据
  • 执行三步转换:perf script > perf.unfold./stackcollapse-perf.pl --all perf.unfold > perf.folded./flamegraph.pl perf.folded > flamegraph.svg
  • 打开 SVG 后,用浏览器 / 键搜索关键词(如 malloc、epoll_wait、json_encode),比肉眼扫图快得多;点击宽函数块可聚焦其子调用链
  • 宽度代表 CPU 时间占比——不是“被调用次数”,而是“正在执行该函数的时间总和”,所以顶层叶子函数宽,说明它本身耗时长;底层宽,说明它被高频调用且每个调用不短

从火焰图反推优化动作

图只是线索,真正调优要结合代码和上下文判断:

  • vsnprintf 占比异常高,先查日志逻辑是否在过滤前就做了格式化(如未判 level 就调 vsnprintf)
  • std::list::size() 出现在热路径,注意它是 O(n),应换 vector 或缓存 size
  • 若大量时间卡在 malloc / free,考虑内存池、对象复用或 jemalloc 替代
  • 若火焰顶端频繁出现 __libc_malloc + 底层业务函数,大概率是高频小对象分配,而非单纯 GC 问题

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

linux性能分析

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3570

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3113

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2153

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5130

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

4822

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

2893

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2405

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2619

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Elasticsearch中文手册
Elasticsearch中文手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.6万人学习