我有一个perl脚本,它执行一些mysql连接来触发选择查询。 我使用DBI perl模块来做同样的事情。Perl脚本消耗100%cpu
有时它会消耗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)
它看起来像它的处理正则表达式。像http://search.cpan.org/~jjore/App-Stacktrace-0.08/bin/perl-stacktrace这样的东西可以告诉你在Perl代码中它被卡住了吗? –
那么,你仔细看看你的代码,可能会搜索绑定到非常大的数据或者可能会非常糟糕地回溯的''/''替换。正常的回溯信号太低而不能提供有用的数据(这里只告诉我们哪个运行正在运行)。 – amon
请包含正在执行的代码,尤其是正则表达式。 – JDB