You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用perf对在线服务器用户态程序离线分析时符号缺失的解决方法

Perf离线分析解决libc及内核符号缺失问题

问题根源

符号缺失通常来自两个核心原因:

  • 服务器端未安装对应库/内核的调试信息包,导致perf-archive无法打包完整符号
  • 本地解析时未正确指定符号路径,或本地与服务器的perf版本、库版本差异过大

服务器端预处理(关键步骤)

  1. 安装调试信息包
    • Debian/Ubuntu系:
      # 安装libc调试包
      apt-get install libc6-dbg
      # 安装内核调试包(替换为当前内核版本)
      apt-get install linux-image-$(uname -r)-dbg
      
    • RHEL/CentOS系:
      # 启用debuginfo仓库后安装
      yum install glibc-debuginfo glibc-debuginfo-common
      yum install kernel-debuginfo-$(uname -r) kernel-debuginfo-common-$(uname -m)-$(uname -r)
      
  2. 验证采集数据的完整性
    在服务器上先执行perf report -i perf.data,确认所有符号(包括libc、内核函数)能正常显示,排除采集阶段的问题。
  3. 重新生成符号归档
    确保perf-archive能抓取所有必要文件:
    perf-archive -i perf.data
    
    执行后会生成perf-archive.tar.gz,可通过tar tvf perf-archive.tar.gz检查是否包含libc.so.6的调试文件、vmlinux等关键符号文件。

本地解析流程

  1. 传输文件到本地
    将服务器上的perf.data和perf-archive.tar.gz一同拷贝到本地目录。
  2. 解压符号归档
    tar xf perf-archive.tar.gz
    
  3. 指定符号路径解析
    执行perf report时通过--symfs参数指向解压后的符号目录:
    perf report -i perf.data --symfs ./
    

额外排查与优化

  • 匹配perf版本:本地perf版本尽量与服务器一致,避免跨版本解析兼容性问题。可通过perf --version查看版本,若差异过大,建议在本地搭建与服务器同版本的容器/虚拟机进行分析。
  • 手动指定内核符号:若内核符号仍缺失,可手动将服务器上的vmlinux文件(通常在/usr/lib/debug/boot/)拷贝到本地,解析时添加--kallsyms=./vmlinux参数。
  • 检查符号文件权限:确保本地解压后的符号文件有可读权限,避免perf无法读取。

内容的提问来源于stack exchange,提问作者Y.Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:15:22