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

如何在Python3脚本中解析Linux-perf生成的性能分析数据?

解析Linux perf性能数据并转为UTF-8文本的正确方法

你的代码之所以持续触发UTF-8解码警告,核心问题是错误地将perf生成的二进制.data文件当成了十六进制文本处理。perf的.data是二进制格式,包含采样记录、内核元数据等非UTF-8的二进制结构,直接按字节解码自然会失败。

下面是两种高效的解决方式:

方法一:用Python专用库解析(推荐)

使用perf库直接解析perf的二进制数据,它会自动处理底层格式,你可以直接提取结构化数据并转为UTF-8文本:

  1. 安装库:
pip install perf
  1. 示例代码:
import perf

# 读取perf数据文件
data = perf.data(path='stage.data')

# 遍历所有采样记录
for event in data:
    # 提取需要的字段,比如进程名、符号名等,这些都是UTF-8文本
    comm = event.comm.decode('utf-8')
    symbol = event.symbol.decode('utf-8') if event.symbol else 'unknown'
    print(f"进程名: {comm}, 符号: {symbol}")

方法二:先转成文本格式再解析

如果不想用第三方库,可以先用perf工具本身将二进制数据转为可读文本,再用Python处理:

  1. 执行命令将.data转为文本:
perf script -i stage.data > stage.txt
  1. Python读取文本文件(直接按UTF-8处理):
with open('stage.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # 处理每行文本,比如提取进程、采样信息等
        print(line.strip())

关于你原有代码的说明

你的hex_to_utf8函数仅适用于纯十六进制编码的文本数据,但perf的.data并非此类格式,所以完全不适用。除非你明确知道数据是十六进制编码的文本,否则不要用这种方式处理perf的二进制输出。

内容的提问来源于stack exchange,提问作者Pawan Nirpal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:26:15