<分区>
我有一个 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 解释器是一样的。也许它来自已安装的库......
谢谢你的帮助