實現高性能服務器免不了進行代碼級性能分析和系統級壓力測試,簡單整理一下代碼級的性能分析工具
1.gprof : 非常易于使用 , 編譯程序時使用-pg選項,然后執行程序,只要程序正常退出(從main()返回或exit退出) , 會生成gmon.out文件,這個文件包含了程序運行時收集的各種統計數據,使用gprof分析這個結果文件可以顯示flat profile , call graph , annotated source 。值得注意的是無法跟蹤內核態的執行情況和進程切換帶來的影響。
2.valgrind :強大和全面的工具,主要包括memcheck,call graph , cache check , thread detector , heap profiler,測試server程序時需要注意信號處理,使程序正常退出。
3.oprofile : 不但可以分析單個程序性能,還能夠分析系統性能 ,作為獨立模塊運行,使用cpu的計數寄存器進行數據分析。
opcontrol --no-vmlinux --start 啟動profile,此時系統會把收集的數據寫入文件,系統的iowait非常高。
opcontrol --stop 關閉profile。
opreport -l server_program 查看結果。
4.tcmalloc : google的內存分配器和profile工具,包括內存檢查和cpu檢查 ,可以編譯進代碼,也可以通過LIB_PRELOAD加載,配合環境變量實現profile功能。
內存分配器:使用了線程cache ,在多線程的環境中比ptmalloc效率高2倍左右。
5.vtune :intel開發的付費工具。