Perl程序性能调试之dprofpp
要调试一个程序的性能,profiling是其中一个很有效的方式。
Perl的安装包自带有一个模块Devel::DProf
用于性能调试。
Quick Start
运行程序,通过-d:DProf
选项启用profiling.
$ perl -d:DProf test.pl
程序执行完毕后,profiling数据存储在当前目录下的tmon.out
文件中。
运行程序dprofpp
来解析文件tmon.out
并输出报告。
$ dprofpp -u
Total Elapsed Time = 1.67 Seconds
User Time = 0.61 Seconds
Exclusive Times
%Time Seconds #Calls sec/call Name
52.4 0.320 2 0.1600 main::foo
45.9 0.280 200 0.0014 main::bar
0.00 0.000 1 0.0000 DynaLoader::import
0.00 0.000 1 0.0000 main::baz
然后就是解读报告来找出性能的瓶颈,然后进行针对性的优化。
dprofpp 使用概要
dprofpp
程序的默认输出是按照函数的exclusive time排序,输出用时最多的前15个函数。
- 选项
-I
:输出 inclusive time,默认的是exclusive time - 选项
-O 15
:输出指定数目的记录,默认值是15 - 选项
-l
:按照函数的调用次数排序 - 选项
-v
:按照函数的平均执行时间排序 - 选项
-t
:输出各函数的调用顺序
tmon.out 的文件格式
文件tmon.out
的内容的格式如下
#fOrTyTwO
$hz=100;
$XS_VERSION='DProf 19970606';
# All values are given in HZ
$rrun_utime=2; $rrun_stime=0; $rrun_rtime=7
PART2
+ 26 28 566822884 DynaLoader::import
- 26 28 566822884 DynaLoader::import
+ 27 28 566822885 main::bar
- 27 28 566822886 main::bar
+ 27 28 566822886 main::baz
+ 27 28 566822887 main::bar
- 27 28 566822888 main::bar
... ...
+
表示函数开始执行-
表示函数结束执行- 每行对应的数字分为是 user time, system time, clock time,单位是ticks
- tick的大小可以由第二行
$hz=100
得出。
更强大的Devel::NYTProf
目前Devel::DProf
已经不被建议使用,而是由更新更强大的Devel::NYTProf
所取代。
虽然如此,考虑到Devel::NYTProf
也许并没有预先安装你的开发环境中,很多时候还是值得先拿Devel::DProf
来试一试。很多时候,也基本够用。
网络资源
- 要调试一个程序的性能,profiling是其中一个很有效的方式。
Perl的安装包自带有一个模块Devel::DProf
用于性能调试。
Quick Start
运行程序,通过-d:DProf
选项启用profiling.
$ perl -d:DProf test.pl
程序执行完毕后,profiling数据存储在当前目录下的tmon.out
文件中。
运行程序dprofpp
来解析文件tmon.out
并输出报告。
$ dprofpp -u
Total Elapsed Time = 1.67 Seconds
User Time = 0.61 Seconds
Exclusive Times
%Time Seconds #Calls sec/call Name
52.4 0.320 2 0.1600 main::foo
45.9 0.280 200 0.0014 main::bar
0.00 0.000 1 0.0000 DynaLoader::import
0.00 0.000 1 0.0000 main::baz
然后就是解读报告来找出性能的瓶颈,然后进行针对性的优化。
dprofpp 使用概要
dprofpp
程序的默认输出是按照函数的exclusive time排序,输出用时最多的前15个函数。
- 选项
-I
:输出 inclusive time,默认的是exclusive time - 选项
-O 15
:输出指定数目的记录,默认值是15 - 选项
-l
:按照函数的调用次数排序 - 选项
-v
:按照函数的平均执行时间排序 - 选项
-t
:输出各函数的调用顺序
tmon.out 的文件格式
文件tmon.out
的内容的格式如下
#fOrTyTwO
$hz=100;
$XS_VERSION='DProf 19970606';
# All values are given in HZ
$rrun_utime=2; $rrun_stime=0; $rrun_rtime=7
PART2
+ 26 28 566822884 DynaLoader::import
- 26 28 566822884 DynaLoader::import
+ 27 28 566822885 main::bar
- 27 28 566822886 main::bar
+ 27 28 566822886 main::baz
+ 27 28 566822887 main::bar
- 27 28 566822888 main::bar
... ...
+
表示函数开始执行-
表示函数结束执行- 每行对应的数字分为是 user time, system time, clock time,单位是ticks
- tick的大小可以由第二行
$hz=100
得出。
更强大的Devel::NYTProf
目前Devel::DProf
已经不被建议使用,而是由更新更强大的Devel::NYTProf
所取代。
虽然如此,考虑到Devel::NYTProf
也许并没有预先安装你的开发环境中,很多时候还是值得先拿Devel::DProf
来试一试。很多时候,也基本够用。
网络资源
- http://perldoc.perl.org/dprofpp.html
- http://perldoc.perl.org/Devel/DProf.html