perl脚本执行时间非常慢

时间:2016-02-03 14:12:19

标签: linux performance perl debian

我有一个perl程序(/usr/bin/ckbcomp)在新安装的debian v8服务器上执行速度非常慢。我在调试很长的启动时间时发现了它。

我在没有这个问题的另一台服务器上比较了这个相同脚本的执行情况,结果他们得到了确切的内核空间执行结果,问题似乎来自userland代码,用perl编写的代码

# slow execution
$ uptime
14:54:16 up  3:19,  1 user,  load average: 0.00, 0.01, 0.05
$ time ckbcomp -backspace bs -model pc105 us
real    0m1.927s
user    0m1.900s
sys     0m0.016s

# normal execution
$ uptime
14:49:31 up 12 days, 17:19,  1 user,  load average: 0.00, 0.03, 0.09
$ time ckbcomp -backspace bs -model pc105 us
real    0m0.381s
user    0m0.376s
sys     0m0.000s

您可以看到用户空间花费的时间。 strace输出大致相同,并确认time输出(相同数量的系统调用,相同的开销和内核空间花费的时间几乎相同)。 uptime用于向您显示cpu负载,因此这不是一个过载问题。

所以我假设问题来自perl执行本身,而ltrace主要是确认它,在1.710485 seconds中花费perl_run()

我现在不知道如何在debian v8上进一步调试perl程序。类似ltrace的解决方案应该足以了解花费的时间。

两台机器上的perl解释器是相同的。也许它来自已安装的库......

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

好吧,我无法直接回答,因为我的系统上没有该脚本。

但总的来说 - 你应该看看那个perl,看看它在做什么。

我会把你作为一个起点 - stracestrace -fTt将跟踪分支,因此也应该报告由perl进行的系统调用。

但是,如果不能解决问题 - Devel::NYTProf将能够告诉您关于代码运行方式以及代码运行情况(以及花费时间的地方)的相关数量。运行它,然后检查缓慢的代码位。