Linux常用调试和性能分析工具

发表于2017-08-28 11:42  |  次阅读  |  0条评论  |   作者:siru90

Linux常用调试工具
编译阶段
Nm
l 功能
获取二进制文件里面包含的符号
二进制文件:可执行文件、目标文件、库文件
符号:函数、变量
l 用途
跟踪链接错误(尤其是C++、C混编的程序)
重要参数
-C,把C++函数签名转为可读形式 (认识c++ name mangling)
l 特别注意
不同版本的g++,对于同样C++函数的函数签名可能是不同的,所以C++库难以跨gcc版本编译使用
如果发现类似问题,先用nm –C看看有无该函数,如果有,再用nm看看函数签名是否一样
Strings
l 功能
获取二进制文件里面的字符串常量
l 用途
很多,比较重要的是检查KEY泄露
l 举例
strings icq_msgrelay | grep ‘^.\{16\}$’
 
Strip
l 功能
去除二进制文件里面包含的符号
l 用途
反编译、反跟踪(基本手段,作用不大)
减小目标文件大小
去除调试信息
不要随意的对库文件strip,否则找不到符号表
 
Gdb
l 功能
debug程序运行
l 用途
debug
gcc –g
bt 
attach/detach
Ldd
l 功能
显示程序需要使用的动态库和实际使用的动态库
l 用途
解决运行库不匹配的问题
结果解说
test@srv_dev0:~$ ldd /bin/ls
librt.so.1 => /lib/librt.so.1 (0x4001a000)
libc.so.6 => /lib/libc.so.6 (0x4002c000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4014f000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
第一栏:需要用什么库;第二栏:实际用哪个库文件;第三栏:库文件装载地址
如果缺少动态库,就会没有第二栏。
运行阶段
Strace
l 功能
显示程序调用的系统调用
分清系统调用和c库函数
l 用途
Debug、性能分析、学习现有程序
重要参数
-c计算各个系统调用累计占用的时间
-T –tt显示单个系统调用的开始时间、执行时间
Ltrace
l 功能
显示程序调用的动态库函数
分清系统调用和c库函数
l 用途
Debug、性能分析、学习现有程序
l 重要参数
-c计算各个函数累计占用的时间
-T –tt显示单个函数的开始时间、执行时间
Vmstat
l 功能
显示系统整体负载情况
l 用途
性能分析
l 通常用法
vmstat 1 每秒刷新一次结果
Iostat
l 功能
对系统的磁盘操作活动进行监视
l 用途
性能分析
l 通常用法
iostat –x 
Sar
l 功能
性能监控
l 用途
性能分析
l 通常用法
sar –d 1 100
sar n DEV 1 100
sar -u 1 100
Top
l 功能
显示系统各个进程整体负载情况
l 用途
性能分析
Free
l 功能
显示系统内存使用情况
l 用途
性能分析
l 举例
注意cached和buffer
Pmap
l 功能
显示进程内存使用情况
l 用途
性能分析
l 举例
pmap -d 5167
SIZE:该进程占用的地址空间。
RSS:实际被分配的内存的大小。
shared :表示这些被分配的内存是被系统中其他进程共享的。    
private :表示只能被该进程使用的空间大小。
Netstat
l 功能
显示udp/tcp socket状态
接收、发送队列的大小
udp接收丢包
l 用途
高危端口
性能分析
重要显示列
Recv-Q:Socket接收缓存,满了(比如CPU太忙)就会丢包
l 举例
netstat -lpn
netstat -su
Time
l 功能
显示程序执行时间、其中用户态时间、其中内核态时间
l 用途
性能分析
l 注意
time只跟踪父进程,所以不能fork
Gprof
l 功能
显示各个函数的执行时间
l 用途
性能分析
l 注意
gcc -pg -g
不能strip
必须通过正常途径退出(exit()、main返回),不能kill -9
有时不太准
只管了用户态时间消耗,没有管内核态消耗
可对c库函数进行性能分析,libc_p.a  (gcc –lc_p)
 
性能优化的一般步骤
1. 确定运行时间主要花在用户态还是内核态
2. 如果是用户态,则使用gprof进行性能分析
3. 如果是内核态,则使用strace进行性能分析
4. 另外可以使用其他工具(比如ltrace等)辅助
学习方法
l man
n man 5 proc
n man strace 等
l info
n info gcc
n info gprof
l google
l 测试程序
本站关键字:sunny90 web开发 数据库 移动开发 服务器 Nginx Mysql PHP
Copyright © sunny90版权所有 power by sunny90.com  
湘ICP备14012284号-1,粤公网安备 44030602000307号