exec()调用的开销?

时间:2011-03-04 19:53:41

标签: cgi benchmarking sh

我有一个Web脚本,它是perl程序的简单包装器:

#!/bin/sh
source ~/.myinit // pull in some configurations like [PRIVATE_DIR]
exec [PRIVATE_DIR]/myprog.pl

这实际上只是为了使代码更好地划分区域,因为主程序(myprog.pl)在具有不同配置模式的不同机器上运行,并且更加清晰,无需为每次安装更新代码。但是,我愿意为了提高效率而牺牲清洁度。

所以问题是,这个额外的sh exec()调用是否会添加任何不可忽略的开销,考虑到它可能经常被网络服务器点击(我们一次有1000个用户)?我问,因为我知道人们已经竭尽全力将程序嵌入到httpd中以避免不得不进行额外的fork / exec调用。我的假设是,这是由于调用程序的开销(例如mod_perl绕过极慢的perl启动),而不是调用自身的过程。那会准确吗?

我试图对此进行基准测试,但我无法得到我需要的分辨率,看它是否有所作为。对此的任何建议也将受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:0)

试一试吗?

假设您的测试环境与生产分开。

(这有点模糊,真正的测试人员将能够扩大如何改进这一点)

  • 在紧密循环中运行您当前的2级设计,使用相同的参数为100,000?百万? ...

  • 然后'修复'你的代码,以便直接调用perl,使用与上面相同的参数,循环相同的计数。

  • 捕获两次运行的性能统计信息。两者之间的差异应该(大致)是额外呼叫的成本。

如果这样做,我会很高兴看到结果: - )

(标签=测试的帖子多于tag = benchmark)

我希望这会有所帮助。

P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,或者给它一个+(或 - )作为有用的答案

答案 1 :(得分:0)

perl程序很容易从shell脚本中接管一些envars,请参阅Have perl execute shellscript & take over env vars的答案。 使用它,根本不需要exec,这可以减轻你对exec开销的所有担忧。 : - )