【问题标题】:mod_perl "use" randomly failsmod_perl“使用”随机失败
【发布时间】:2014-10-13 12:45:36
【问题描述】:

我们的软件使用 perl 和带有 mod_perl 的 Apache 有一个 Web 界面。在最近的 Ubuntu 14 安装(Apache 2.4.7,perl 版本 5.18.2)中,我们遇到了随机停止工作并出现以下错误的问题。这将在随机时间(例如几个小时或几天)后发生,在任何以前的 Ubuntu 或 CentOS 安装上都没有发生过,我们只能通过重新启动 Apache 来暂时解决它。

调试它的困难在于它运行良好一段时间,处理数百或数千个请求,我们无法确定任何特定的触发器使其停止工作。

有人对如何调试和解决它有想法吗?谢谢。

以下是错误信息。每个 Web 请求都会重复此操作,直到 Apache 重新启动。提到的 Utils.pm 是我们软件的一部分,并且在 index.pl 的第 2 行中“使用”。 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

【问题讨论】:

  • 您是否尝试过在 /path/to/index.pl 中的 Utils 之前使用 Carp::Always?

标签: apache perl mod-perl


【解决方案1】:

我通过消除过程来解决这些问题。如果部署没有完全成功,我想知道它与完全成功的部署有何不同。

我将从检查 Perl 依赖项的版本开始。不同的发行版可能包含不同版本的非核心模块。如果您的部署过程包括从 CPAN 拉取依赖项,那么您在最近的部署中可能有比以前的部署更新的模块版本。

如果我发现依赖项不同,我会将相同版本从可接受的部署部署到新部署。如果它解决了问题,我知道我必须为未来的部署改进流程。如果它不能解决问题,我将继续讨论可接受和不可接受部署之间的其他可识别差异。 “可识别”取决于我可以使用的资源。我是一个几乎称职的系统管理员,因此我可能会咨询同事以帮助我识别该级别的不一致之处。

我们知道在某些环境中软件可以按预期工作。我们可能无法找出确切的根本原因,但可以合理地期望我们可以使环境对应用程序更友好。

【讨论】:

  • 谢谢乔纳森。错误消息中提到的 Utils.pm 使用了从 Ubuntu 包管理器和 CPAN 安装的大约 10 个模块。它们大多与旧的 Ubuntu 服务器不同。你能建议如何缩小原因吗?
  • 查看部署差异的过程是合乎逻辑的,但我担心将 Ubuntu 12 与 Ubuntu 14 进行比较可能是一项艰巨的任务。有谁知道我们如何添加一些调试日志以从 perl 获取更具体的错误消息,以了解问题出在哪里?
【解决方案2】:

问题似乎可以通过在 apache2.conf 中禁用 Apache2::Reload 来解决:

PerlInitHandler Apache2::Reload
PerlSetVar ReloadAll Off

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-04
    • 2017-02-07
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多