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