我们的软件使用perl,Apache和mod_perl。在最近的Ubuntu 14安装(Apache 2.4.7,perl版本5.18.2)上,我们遇到了随机停止处理下面的错误的问题。这将在随机的一段时间(例如几个小时或几天)之后发生,在以前的任何Ubuntu或CentOS安装中都没有发生,并且我们只能通过重新启动Apache来暂时解决它。
调试的困难源于它运行良好一段时间,处理数百或数千个请求的事实,并且我们无法确定任何特定的触发器以停止工作。
有人会有关于如何调试和解决它的想法吗?谢谢。
以下是错误消息。每次Web请求都会重复此操作,直到Apache重新启动。提到的Utils.pm是我们软件的一部分,并且在index.pl的第2行使用" d。 Utils.pm本身"使用"以及其他一些模块。
[Sun Jul 27 19:26:18.110765 2014] [:error] [pid 26316:tid 139927794730752]尝试重新加载Utils.pm中止。\ n在/path/to/index.pl第2行的require中编译失败。 \ nBEGIN失败 - 编译在/path/to/index.pl第2行中止。\ n
答案 0 :(得分:1)
我通过消除过程来解决这些问题。如果部署没有完全成功,我想知道它与完全成功的部署有何不同。
我首先会检查Perl依赖项的版本。不同的发行版可能包含不同版本的非核心模块。如果您的部署过程包括从CPAN中提取依赖关系,则最近部署的模块可能比以前的部署版本更新。
如果我发现依赖关系不同,我会将相同的版本从可接受的部署部署到新部署。如果它解决了问题,我就知道我必须改进流程以便将来部署。如果它没有解决问题,我将继续讨论可接受和不可接受的部署之间的其他可识别差异。 "可识别"取决于我拥有的资源。我是一个几乎足够的系统管理员,因此我可能会与同事协商,以帮助我找出该级别的不一致。
我们知道有些软件可以按预期运行。我们可能无法隔离确切的根本原因,但我们可以期望我们可以使环境更适合应用程序。
答案 1 :(得分:1)
通过在apache2.conf中使用以下内容禁用Apache2 :: Reload,似乎解决了这个问题:
PerlInitHandler Apache2::Reload
PerlSetVar ReloadAll Off