首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

gprof 無法生成 gmon.out?長期運行程序的性能分析替代方案

     編輯:程式設計綜合問答

問題描述

服務器程序編譯時加入 -pg 選項,程序長期運行不退出,運行結束後發現未生成 gmon.out 文件。

原因

gprof 依賴程序正常退出時將分析數據寫入 gmon.out。長期運行的守護進程若不退出(或被強制殺死),緩衝區數據無法刷新,導致文件不生成。

替代方案

  • perf:Linux 下強大的性能分析工具,支持採樣模式,無需修改代碼,可附加到運行中的進程:perf record -p <pid> -g -- sleep 60。
  • gperftools (Google Performance Tools):提供 libprofiler.so,可通過環境變量 CPUPROFILE 動態開始/停止分析,適合長期服務。
  • 信號觸發傾印:在代碼中註冊信號處理函數(如 SIGUSR1),調用 ProfilerStop() 或手動寫入數據。
  • Valgrind --tool=callgrind:啟動時附加,適合開發測試階段。

建議

生產環境長期服務首選 perf 或 gperftools,無需重新編譯,對性能影響極小。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved