在一段时间内运行在ubuntu 16.04上的mod_perl应用程序中,一切运行正常(几天)后,我们在错误日志中收到致命消息:
无法解析处理程序
MyHandler::ModPerl20
无法在@INC中找到模块main的可加载对象
MyHander :: ModPerl20在位置块中定义
<Perl>
unshift @INC, '/path/to/my/code';
</Perl>
<Location ~ "/imp($|/)">
SetHandler modperl
PerlResponseHandler MyHandler::ModPerl20
</Location>
ubuntu Perl版本是5.22。 Apache 2.4
这可能是问题吗? http://blog.feature-addons.de/2016-05-15-otrs-apache-mod-perl-perl-5-22
任何想法如何解决这个问题?我真的需要设置nginx / uwsgi吗?
答案 0 :(得分:2)
确保@INC
设置正确,以便找到安装MyHandler::ModPerl20
的路径(我认为当Apache回收一些孩子的时候会发生新的事情正确的@INC
值,因此不再找到您的模块。
尝试添加一个
在httpd.conf中PerlSwitches -I/your/path/for/myhandler/
看看它是否解决了你的问题。
如果这会改变一切,请查看modperl文档中的Adjusting @INC以查看所有详细信息。
答案 1 :(得分:0)
我见过其他类似的东西,不仅是SAS,还有其他产品。
我会请求您的系统管理员检查Linux服务器中的IO模块。我认为他们需要重新安装,或者只是检查相关文件夹上的授权。
答案 2 :(得分:0)
将MPM Apache配置从mpm_event更改为mpm_prefork解决了我的问题。
答案 3 :(得分:-1)
我敢打赌你的代码使用 CGI.pm
,这就是导致它崩溃的原因。运行不带CGI.pm
的代码,代码永远不会崩溃。
我怀疑Perl脚本引发了内存包装,服务器不得不恐慌(CGI.pm等可能导致这种情况)。 所以Perl代码中有一个地方无法正确处理某种情况。
如果无法看到您的代码,我只能猜测从这里开始做什么..但您可以尝试在配置中启用警告PerlWarn on
或PerlSwitches -W
,使用严格,警告,添加记录Perl的所有警告和死亡错误的文件。