perl脚本消耗100%的cpu

时间:2013-07-19 14:03:59

标签: regex linux perl gdb

我有一个perl脚本,可以执行一些mysql连接来激活select查询。 我使用DBI perl模块来做同样的事情。

有时它会消耗100%的CPU并且什么都不做。我得到了gdb回溯的实时进程,而它消耗了99%到100%的cpu。

#0  0x0000003990a7c680 in memcpy () from /lib64/libc.so.6
#1  0x0000003992ae6e27 in Perl_regexec_flags () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#2  0x0000003992a922d5 in Perl_pp_subst () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#3  0x0000003992a8a39e in Perl_runops_standard () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#4  0x0000003992a37ecc in perl_run () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#5  0x00000000004017bc in main ()

我该怎么办? (我使用的是CentOS 5.8版(最终版)kernel-2.6.18-308.el5)

1 个答案:

答案 0 :(得分:1)

有时,正则表达式处理可能需要永久,即使是适量的数据。

假设您有这样的正则表达式:

my $data =~ s!.*findit:(.+)!$1!gis;

这个正则表达式做的相同但速度要快得多:

my $data =~ s!\A.*findit:(.+)\z!$1!is;