在鴻蒙系統(HarmonyOS / OpenHarmony)整機性能測試過程中,長時間抓取 trace 是分析系統級性能瓶頸(如卡頓、調度延遲、功耗異常等)的關鍵手段。鴻蒙提供了 基於 ftrace 的 HiTrace + hitrace 命令行工具鏈,並支持長時間採集。

✅ 一、核心工具:hitrace

hitrace 是鴻蒙系統內置的 trace 採集命令行工具,底層基於 Linux ftrace,可抓取內核和用户態的事件(包括 HiTraceMeter 打點、調度、CPU、內存、I/O 等)。 🔧 基本用法(適用於長時間抓取):

bash

  1. 進入設備 shell(通過 hdc) hdc shell
  2. 查看可用的 trace 標籤(Tag) hitrace -l
  3. 開始長時間 trace(例如只抓 APP 和系統關鍵模塊) hitrace --trace_begin app,system,sched,irq
  4. (可選)後台運行你的測試場景(如自動化腳本、壓力測試等) 此時 trace 數據會持續寫入內核緩衝區
  5. 經過一段時間後(比如 5 分鐘、30 分鐘),停止採集 hitrace --trace_finish
  6. 導出 trace 數據(默認輸出到 stdout,建議重定向到文件) hitrace --trace_dump > /data/log/long_trace.log 💡 注意:--trace_dump 會清空內核緩衝區,所以務必在 --trace_finish 後立即執行。

⏳ 二、如何實現“長時間”抓取?(關鍵技巧)

  1. 增大 trace 緩衝區 默認緩衝區僅 2MB,長時間高負載下容易溢出。可通過 -b 參數擴大:

bash 設置 64MB 緩衝區(單位 KB) hitrace --buffer_size 65536 --trace_begin app,sched 最大值受設備內存限制,通常建議 32~128 MB。

  1. 指定採集時長(自動停止) 若不想手動 stop,可用 --time 參數自動結束:

bash 自動採集 600 秒(10 分鐘) hitrace --time 600 --trace_begin app,sched,irq 採集結束後自動 dump hitrace --trace_dump > /data/log/10min_trace.log ⚠️ 注意:--time 模式下無需手動調用 --trace_finish。

  1. 過濾關鍵事件,減少數據量 長時間採集建議 只開啓必要類別,避免日誌爆炸:

bash 推薦組合(整機性能分析常用) hitrace --trace_begin app,sched,workq,irq,cpu_idle app:應用層 HiTraceMeter 打點 sched:任務調度事件 workq:工作隊列 irq:中斷處理 cpu_idle:CPU 休眠狀態(對功耗分析重要)

  1. 使用 bytrace(兼容 systrace 格式) 鴻蒙也支持 bytrace 工具(類似 Android systrace),更適合可視化分析:

bash 長時間採集並保存為 HTML(可直接用 Chrome 打開) bytrace -t 600 -b 65536 -o /data/log/bytrace_10min.html app sched irq 生成的 HTML 可拖入 chrome://tracing 查看時間線、幀率、CPU 佔用等。

🛠 三、輔助工具推薦

工具 用途


SmartPerf-Host 華為官方 GUI 工具,支持一鍵抓取 trace + Profiler + 內存分析(適合非命令行用户) DevEco Studio → AppAnalyzer 應用級性能體檢,但不適合整機長時間採集 hilog + 自定義打點 配合 HiTraceMeter,在關鍵路徑插入日誌,便於 trace 中定位業務邏輯

✅ 四、最佳實踐建議

  1. 先小規模測試:確認標籤、緩衝區大小是否合理;
  2. 避免全開所有 tag:hitrace -l 列出的標籤不要全選,否則日誌巨大且難分析;
  3. 配合自動化腳本:在 CI/CD 或壓力測試中自動觸發 hitrace;
  4. 導出後及時清理:/data/log/ 空間有限,避免佔滿導致系統異常;
  5. 使用新 API 打點:應用層用 hiTraceMeter.startAsyncTrace()(API 19+),確保 trace 可被正確識別。

🔍 示例:整機 30 分鐘性能壓測 trace 採集

bash hdc shell <<EOF hitrace --buffer_size 131072 --time 1800 --trace_begin app,sched,workq,cpu_freq,cpu_idle hitrace --trace_dump > /data/log/perf_30min.trace sync EOF 從設備拉取日誌 hdc file recv /data/log/perf_30min.trace ./perf_30min.trace

如需進一步分析,可將 .trace 文件導入 Perfetto 或 SmartPerf-Host 進行可視化。 如你使用的是 HarmonyOS NEXT(API 12+),上述命令完全適用;OpenHarmony 3.2+ 也支持類似機制。

如有具體場景(如啓動優化、滑動卡頓、功耗分析),可提供更針對性的 trace 配置方案。