0

我有一个在 cgi 上运行的应用程序。我已将其移植到 mod_perl2(使用 apache2::compat)并将 cgi 文件重写为 mod_perl 处理程序。奇怪的是,我通过 mod_perl 获得的性能被日志记录中的延迟所掩盖。

应用程序中的日志记录机制类似于 logger->logmsg(msg)

logger::logmsg { 我的 $msg = shift; 打开日志文件,“>>日志文件”;打印日志文件 $msg 关闭日志文件;}

应用程序完成了大量日志记录,并由不同级别的日志记录控制。当我关闭日志记录时,在 mod_perl 上的事务工作速度比在 cgi 上快 80%(代码库相同。我只是使用 mod_perl 的处理程序和 cgi 的网关脚本运行)。当我在 mod_perl 上打开日志记录应用程序时,运行速度会慢 80%。

从日志中,我可以看到相同的日志模块在作为 cgi 脚本运行时将 msg 附加到文件中需要 0.01 秒,而在运行 thro mod_perl 处理程序时需要 0.03 秒。

我尝试了不同的方法,例如使用 STDOUT 并将其重定向到日志文件、使用 request_obj->log 方法等,但我无法击败 cgi 所花费的时间。这种方法我做错了什么吗?

为什么在同一个 apache 服务器中通过 mod_perl 脚本执行文件操作时慢 3 倍。

任何指针都受到高度赞赏。

谢谢。

4

1 回答 1

0

这不是文件 IO 本身的问题。有一个系统调用 ( date +%Y%m%d) 来获取时间戳,它的速度是 cgi 中的三倍。这产生了减速效果。

但是,我不确定为什么 apche 在通过 cgi 而不是 modperl 运行时能够以三次一样快的速度执行系统命令。

很抱歉问题中的错误信息。

于 2011-06-16T05:08:45.637 回答