linux下程序的性能分析
本来觉得linux下性能分析只是一系列工具,也没什么难点。后来发现几个工具中间,各有优缺点。
稍微介绍下吧。
gprof:
这个工具比较轻量级,能看到所有的函数调用链,和函数运行时间,原生是只支持单线程监控的,通过文中的方法,可以支持多线程
这是最傻瓜的工具了,也不支持内核下的调用情况,能做最简单的分析
Perf:
Perf -- Linux下的系统性能调优工具,第 1 部分
基本这样使用即可
perf record –e cpu-clock ./t1
perf report
比较复杂一点的监控程序,缺点是在虚拟机下,大部分的时间消耗会出现在_spin_unlock_irqrestore这个函数上
stackoverflow搜了下,有人也提出了这个问题
_spin_unlock_irqrestore() has very high sampling rate in my kvm, why?
根据老外的说法,IRQs禁用的时候,perf的中断其实没有运行而在排队等待,而中断钩子会监视唤醒时运行的函数,大部分情况下是_spin_unlock_irqrestore
I know that it can be done with oprofile (perf's predecessor) by changing the makefile, but don't know about perf.
搜了下,perf没看到比较详细的文档,于是尝试使用oprofile
oprofile:
这个工具很强大,最关键是他不会打断程序的使用,就是装起来很麻烦,需要编译内核来支持
除此之外oprofile在vmware下需要开启Timer Interrupt模式,这个模式详细信息参考链接中第二篇文章。
具体开启是这样的:
# opcontrol --deinit
# modprobe oprofile timer=1
# echo "options oprofile timer=1" >> /etc/modprobe.conf
然后就可以了# opcontrol --start
-
2014-08-19
有很多有用的工具和命令,平时使用的很多,但是感觉自我总结的不如前辈们的好,秉承着不转载的原则,只是贴出链接
性能监控:
1 netstat工具:
2 iperf工具: