linux - perl 脚本执行时间非常慢

标签 linux performance perl debian

<分区>

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

我比较了同一脚本在另一台没有这个问题的服务器上的执行结果,结果是它们具有准确的内核空间执行,而且问题似乎来自用户态代码,即用 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 秒 花费在 perl_run() 中。

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

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

谢谢你的帮助

最佳答案

嗯,我不能直接回答,因为我的系统上没有那个脚本。

但总的来说——您应该查看那个 perl,看看它在做什么。

我会以 strace 作为起点,正如您已经提到的那样。 strace -fTt 将跟随 fork,因此也应该报告 perl 进行的系统调用。

但是,如果这不起作用 - Devel::NYTProf 将能够告诉您相当多的关于您的代码是如何运行的以及它在做什么(以及它把时间花在哪里了) ).运行它,然后检查运行缓慢的代码位。

关于linux - perl 脚本执行时间非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35179392/

相关文章:

performance - 保存左移(SHL)中偏移的位

正则表达式在 Perl 中不匹配

linux - Mac 与 Linux 上的 Docker 挂载权限

linux - 查找 Puppet 代码以检索用户信息

java - 在 root 的 Android (Jelly Bean) 中拦截来电

c++ - 调用 AISI 转义序列时避免行返回

Android 提高了使用 JSON 数据填充表布局时的性能

performance - 我应该通过引用还是值传递一个大数组?

perl - 如何在 perl 中实现单例类?

perl - 使用 Net::SSH::Perl 模块执行多个命令