我有一个在cgi上运行的应用程序。我已经将它移植到mod_perl2(使用apache2::compat),并将cgi文件重写为mod_perl处理程序。奇怪的是,由于mod_perl,我获得的性能被日志中的延迟所掩盖。
应用程序中的日志记录机制类似于logger->logmsg(msg)
记录器::logmsg{my$msg=shift;打开LOGFILE,">>日志文件";打印LOGFILE$msg关闭LOGFILE;}
应用程序进行了大量日志记录,并由不同级别的日志记录控制。当我关闭日志记录时,事务在mod_perl上的工作速度比在cgi上快80%(代码库是相同的。我只是使用mod_perl的处理程序和cgi的网关脚本运行)。当我打开modperl上的日志应用程序时,运行速度会慢80%。
从日志中,我可以看到,当作为cgi脚本运行时,相同的日志模块将msg附加到文件中需要.01秒,而当通过mod_perl处理程序运行时,需要.03秒。
我尝试过不同的方法,比如使用STDOUT和将相同的文件重定向到日志文件,使用request_obj->log方法等,但我无法超过cgi所花费的时间。我的这种做法有什么不对吗?
为什么在同一个apache服务器中通过mod_perl脚本执行文件操作会慢3倍。
任何指针都将不胜感激。
谢谢。
这不是文件IO本身的问题。有一个系统调用(date +%Y%m%d
)来获取时间戳,其速度是cgi中的三倍。这产生了减缓的效果。
然而,我不确定为什么apche在通过cgi而不是modperl运行时能够以三倍的速度执行系统命令。
对问题中的错误信息感到抱歉。