Trace 文件太大打不开怎么办?使用 trace_processor
在线文档地址:Trace 文件太大打不开怎么办?使用 trace_processor
https://wayawbott0.f.mioffice.cn/docx/doxk4h0INjiMfIk6INxmqbCi63b
一、提出问题
你是否遇到过一个 trace 文件有好几百 MB,甚至有 1 G 多 ?
无论用下面哪一个网址都****打不开这个巨大的 trace 文件。
https://perfetto.pt.xiaomi.com/
二、解决问题
1、复现问题
在浏览器打开上面任意网址,就以 https://ui.perfetto.dev/ 网址来实验。
打开网址后,把那个巨大的 trace 文件拖拽到打开的页面中。
等待加载完成后,会看到一个 oops 弹窗:

Oops! Your WASM trace processor ran out of memory
The in-memory representation of the trace is too big for the browser memory limits (typically 2GB per tab).
You can work around this problem by using the trace_processor native binary as an accelerator for the UI as follows:
curl -LO https://get.perfetto.dev/trace_processor
chmod +x ./trace_processor
trace_processor —httpd /path/to/trace.pftrace
Reload the UI, it will prompt to use the HTTP+RPC interface
For details see https://perfetto.dev/docs/quickstart/trace-analysis#get-trace-processor
2、准备 trace_processor 环境
1)、按照上面弹窗提示,先下载 trace_processor 文件
如何下载?
上面弹窗已经给出了命令。使用命令:
sudo curl -LO https://get.perfetto.dev/trace_processor注意:
1、执行命令后,trace_processor 文件会下载到当前目录中。
2、如果刚才打开的网址是 https://10.221.136.106/,然后把 big big trace 文件拖拽进去的,那上面弹窗中提示的下载命令就是 curl -LO http://10.221.136.106:9000/trace_processor。那对应的下载命令就是:
JSON
复制
sudo curl -LO http**://10.221.136.106:9000/trace_processor**
Q1、我这已经有了 trace_processor 文件,还需要重新下载吗?
A:需要。最好每次都下载最新的 trace_processor 文件。避免使用旧的 trace_processor 文件打开 trace 时失败,查不到原因。
Q2、执行上面下载的这行命令后,提示失败报错,说没有 curl
A:那就安装 curl。提示缺少什么,就安装什么。使用命令:
JSON
复制
sudo apt install curl
2)、给 trace_processor 文件赋予可执行权限
如何赋予权限?
上面弹窗已经给出了命令。使用命令:
JSON
复制
sudo chmod +x ./trace_processor
或者偷懒,全部开放权限。使用命令:
JSON
复制
sudo chmod 777 ./trace_processor
3、执行 trace_processor 文件
执行 trace_processor 文件,打开远程服务,加载本地那个巨大的 trace 文件。
如何执行?
上面弹窗已经给出了命令。使用命令:
JSON
复制
./trace_processor —httpd /path/to/trace.pftrace
上面命令中 /path/to/trace.pftrace 是本地那个巨大的 trace 文件的 完整路径
1)、如何加载本地 trace 文件
上面命令其实是加载本地 trace 文件到远程服务端,命令行能看到加载进度:
Loading trace: xxx MB
2)、如何知道加载完成
当你看到 Terminal 中有这些信息时(最后两行 HTTP 信息),就表示 trace 文件加载完成了

3)、打开执行的 trace 页面
接下来要怎么办呢?
看上面 Terminal 中的提示内容:
[HTTP] Starting RPC server on localhost:9001
[HTTP] This server can be used by reloading https://ui.perfetto.dev and clicking on YES on the “Trace Processor native acceleration” dialog or through the Python API (see https://perfetto.dev/docs/analysis/trace-processor#python-api).
上面弹窗中提示:可以使用 https://ui.perfetto.dev 地址访问服务…
那就在浏览器中再次打开 https://ui.perfetto.dev 网址。
看浏览器弹窗提示:
选择第一个按钮:【Open **https://xxxxxx**】

又来个弹窗:
还是选择第一个按钮:【YES,use loaded trace】

完成了,trace 文件已经打开
三、注意事项
问题1:当你正在分析已经打开的 trace 时,你有没有发现 Terminal 中的提示?
看截图:个人推测,Terminal 作为 Client 端,正在执行 trace_processor 文件提供的 websocket 远程服务。
所以,浏览器才能获取服务端加载的 trace 文件。

问题2:此时,如果你在 Terminal 中按下 Ctrl + C 会有什么效果呢?
客户端断开连接,Terminal 退出执行。

问题3:网页端还能继续查看 trace 吗?
网页 Websocket 长链接断开。Websocket closed。

所以,当你还需要使用网页端加载的 trace 时,知道要保持 Terminal 长链接了吧
四、Use shell tool
http://minio.898311.xyz:8900/blogfile/17472961510018.zip
#!/bin/bash
#
# Usage:
# Terminal>:chmod +x ./run_trace_processor.sh
# Terminal>:./run_trace_processor.sh /your/trace/full/path/filename.suffix
#
# when terminal print "[HTTP] Starting RPC server on ..."
# you can open address of "https://ui.perfetto.dev" on browser
#
#
# 当前脚本文件存在的意义:
# 如果一个 trace 文件有 1G+,在浏览器网页 https://ui.perfetto.dev 中无法加载出来。
# 那此时,就可以使用这个脚本程序来处理了。
#
#
# Function:
# 1、获取命令行传入的 trace 文件路径。
# 2、如果当前目录下存在旧的 ./trace_processor 文件,则先删除。
# 3、如果没有安装 curl 库,则先安装。
# 4、下载最新的 ./trace_processor 文件。
# 5、给 ./trace_processor 文件赋予 可执行 权限。
# 6、启动 ./trace_processor 服务。
# 7、在浏览器打开网址 https://ui.perfetto.dev。
#
#
#
# 判断某个 lib 是否已经安装
isLibInstall() {
whichPath=$(which $1)
return $(expr length "$whichPath")
}
# 检查 & 删除某个文件
deleteFileIfExists() {
filePath=$1
# 如果 TRACE_PROCESSOR 文件存在
isDeleteSuccess=0
if test -e $filePath
then
echo "Tip:尝试删除当前目录下旧的 $filePath 文件"
# 执行这一行代码,注意安全!!!
rm -rf $filePath
# 如果 TRACE_PROCESSOR 文件存在
if test -e $filePath
then
echo "Tip:$filePath 文件删除失败,请自己手动删除!"
else
echo "Tip:$filePath 文件删除成功!"
isDeleteSuccess=1
fi
else
echo "Tip:$filePath 旧文件不存在,无需删除!"
fi
unset filePath
return $isDeleteSuccess
}
# 获取文件内容大小
getFileSize() {
fileSizeInt=0
filePath=$1
# 检查文件是否存在
if [ -e "$filePath" ]; then
# 获取文件大小
fileSizeInt=$(stat -c%s "$filePath")
fi
echo "Tip:$filePath 文件大小:${fileSizeInt} bytes"
unset filePath
return $fileSizeInt
}
# 程序从此处开始执行
# ---------------------------------------------------------
# 接收命令行传入的 trace 文件路径
readonly TRACE_PATH=$1
# 当前目录下的 trace_processor 文件
readonly TRACE_PROCESSOR_PATH="./trace_processor"
# 判断:trace 文件名是否为空
if [ ! $TRACE_PATH ]
then
echo "Tip:未获取到 Trace 文件名称!"
echo "Tip:你是否在执行 ./run_trace_processor.sh 时传递了参数?"
echo "Tip:Usage:./run_trace_processor.sh /your/trace/full/path/filename.suffix"
exit 0
fi
if [ ! -e $TRACE_PATH ]
then
echo "Tip:Trace 文件 ${TRACE_PATH} 不存在!"
exit 0
fi
echo "Tip:获取到 Trace 文件路径: ${TRACE_PATH}"
echo "Tip:${TRACE_PATH} 是不是 Trace 文件,我不清楚,请你自己保证!"
#chmod +x ./trace_processor
# 如果 $TRACE_PROCESSOR_PATH 文件存在,则删除
deleteFileIfExists $TRACE_PROCESSOR_PATH
# echo "Tip:delete code: $?"
isLibInstall curl
if [ $? -gt 0 ]
then
echo "Tip:curl 库已经安装"
else
echo "Tip:curl 库没有安装"
echo "Tip:尝试安装 curl,需要 sudo 管理员权限。"
sudo apt install curl
fi
echo "Tip:尝试下载最新的 trace_processor 文件"
echo "Tip:执行下载命令:curl -LO https://get.perfetto.dev/trace_processor"
curl -LO https://get.perfetto.dev/trace_processor
# 简单暂停几秒,等待文件下载完成
echo "Tip:等待 1 秒,等待 $TRACE_PROCESSOR_PATH 文件下载完成"
sleep 1s
# 如果 $TRACE_PROCESSOR_PATH 文件存在,检查文件是否存在
getFileSize $TRACE_PROCESSOR_PATH
# getFileSize 方法是通过 return 返回的,数值会被截断[0, 255]
fileSizeInt=$?
# 判断文件大小是否不为0
if [ $fileSizeInt -le 0 ]; then
echo "Tip:$TRACE_PROCESSOR_PATH 文件为空。请重新执行,或者手动下载该文件!"
exit 0
fi
unset fileSizeInt
echo "Tip:给 ./trace_processor 文件赋予可执行权限。"
chmod +x ./trace_processor
isLibInstall xclip
if [ $? -gt 0 ]
then
echo "Tip:https://ui.perfetto.dev" | xclip -selection clipboard
echo "Tip:已经复制 https://ui.perfetto.dev 到剪切板"
else
echo "Tip:xclip 没有安装,没有复制 https://ui.perfetto.dev 到剪切板"
fi
echo "Tip:开始连接 httpd 服务 ..."
echo "Tip:当你看到命令行出现类似:...[HTTP] Starting RPC server on localhost... 内容时"
echo "Tip:你可以在浏览器打开网址:https://ui.perfetto.dev,开始加载 & 分析 Trace 文件了"
echo "Tip:更多使用说明,见 https://wayawbott0.f.mioffice.cn/docx/doxk4h0INjiMfIk6INxmqbCi63b"
./trace_processor --httpd $TRACE_PATH
echo "Tip:程序结束!"嫌弃上文描述的步骤好复杂?那就直接用下面脚本文件一步搞定
run_trace_processor.sh 脚本程序用法:
Run shell
Terminal>:chmod +x ./run_trace_processor.sh
Terminal>:./run_trace_processor.sh /your/trace/full/path/filename.suffix
Open url
Take care msg in terminal
when terminal print “[HTTP] Starting RPC server on …”
you can open address of “https://ui.perfetto.dev” on browser