1 程序構(gòu)建
Step1:配置?檢測當前環(huán)境是否滿足安裝軟件的依賴關(guān)系以及初始化程序
?./configure --help
?./configure --prefix=/usr/local/snmps指定安裝路徑
Step2:編譯?源文件編譯鏈接生成可執(zhí)行文件
?make -f myMakefile編譯指定的makefile文件轧铁,
???以下編譯選項是指定用戶環(huán)境變量讥此,右邊庫是左邊的前提:
???CPPFLAGS='-I/usr/local/libcom/include -I/usr/local/libpng/include'
???LDFLAGS='-L/var/xxx/lib -L/opt/mysql/lib'
makefile文件中的變量
??$@目標文件名
??@^所有前提名梳星,除副本
??@+所有前提名枚驻,含副本
??@<一個前提名
??@痴昧?所有新于目標文件的前提名
??@*目標文件的基名稱
ldd myprogrammer可以查詢app需要的鏈接庫
Step3:安裝?將生成的可執(zhí)行文件拷貝到指定路徑
?make install
2 程序調(diào)試
gdb 程序交互調(diào)試
?$gdb programmer?啟動gdb
??> break main?設(shè)置斷點
??> run?運行調(diào)試程序
??> next?單步調(diào)試
??> print var1?使用print打印某個變量值
??> list?顯示當前調(diào)試處的源代碼
??> info b?顯示當前斷點設(shè)置情況
pstack 跟蹤棧空間
?$pstrack < pid >
??Thread 7 (Thread 1084229984 (LWP 4552)):
??#0 0x00000000006f172a in ub::NetReactor::callback ()
??#1 0x00000000006fbbbb in ub::UBTask::CALLBACK ()
??#2 0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
strace 分析系統(tǒng)調(diào)用
常用來跟蹤進程執(zhí)行時的系統(tǒng)調(diào)用和所接收的信號腋舌。進程不能直接訪問硬件設(shè)備帆离,當進程需要訪問硬件設(shè)備時,必須由用戶態(tài)模式切換至內(nèi)核態(tài)模式僧叉,通過系統(tǒng)調(diào)用訪問硬件設(shè)備奕枝。
?$strace -o output.txt -T -tt -e trace=all -p < pid >
?$strace -p <process-pid>?實時輸出進程執(zhí)行系統(tǒng)調(diào)用的情況
size 查看程序內(nèi)存占用
查看程序運行時各個段的實際內(nèi)存占用
?$size a.out
??text data bss dec hex filename
??1146 256 8 1410 582 a.out
file 查詢文件類型
?$file a.out
strings 查詢數(shù)據(jù)中的文本信息
?$strings <objfile>
fuser 顯示文件使用者
顯示所有正在使用著指定的file, file system 或者 sockets的進程信息
?$fuser -m -u redis-server
?$fuser –k /path/to/your/filename
3 性能優(yōu)化
主要從兩個層面來介紹:系統(tǒng)層面和程序?qū)用?br>
分析系統(tǒng)瓶頸
?top?輸入M,查看內(nèi)存使用情況瓶堕,檢測內(nèi)存泄漏隘道;
????輸入P,查看CPU情況:
?????%id空閑CPU值過低捞烟,則cpu存在瓶頸
?????%wa等待IO的CPU過高薄声,則IO存在瓶頸
分析內(nèi)存瓶頸
?free?更直觀詳細的查看內(nèi)存情況
??系統(tǒng)實際可用的內(nèi)存為free工具輸出的free+buffer+cached
??缺少內(nèi)存,系統(tǒng)響應(yīng)變慢很明顯题画,因為這使得系統(tǒng)不停的做換入換出的工作
?vmstat?實時動態(tài)監(jiān)視操作系統(tǒng)的內(nèi)存和虛擬內(nèi)存的動態(tài)變化
分析IO瓶頸
?iostat
分析進程調(diào)用
?pstack
?strace
優(yōu)化程序代碼
?二八法則:先優(yōu)化最重要的少部分代碼
?編完代碼默辨,再優(yōu)化:強調(diào)效率和可讀性
性能分析工具
?gprof
??http://www.cnblogs.com/me115/archive/2013/06/05/3117967.html
??> g++ -pg -o test main.cpp?使用-pg參數(shù)在目標代碼中插入用于性能測試的代碼片斷
??> ./test?輸出gmon.out的性能數(shù)據(jù)文件
??> gprof test gmon.out?分析程序運行信息
?OProfile
??https://www.ibm.com/developerworks/cn/linux/l-oprof/
?sar
調(diào)試內(nèi)存泄漏
?valgrind