0

我想请你帮忙。在我们公司,我们在 Windows 机器上安装了 Bugzilla 4.0。为了运行 perl,我们目前正在使用 ActivePerl。

问题是,我们有大约 50 个用户定期查询 Bugzilla Web 服务,而服务器无法承受这个负载。我们发现,它是由 perl.exe 引起的,它在每个请求期间都运行。服务器工作负载 (CPU) 在高峰期达到 90%。

你有没有遇到过这样的问题?我们可以进行任何可能的配置来提高性能吗?

我们正在使用:Apache 2.2.17 和 ActivePerl 5.8.9 b829。非常感谢您,这给我们(尤其是我)带来了很多麻烦。

4

2 回答 2

2

随着网站的增长,这是一个相当普遍的问题。它也不特别限于 Perl。有解决方案。正如一个人提到的,有 mod_perl,它本质上是作为 Apache 模块安装的。它可以通过 Apache::Registry 以一种简单的版本使用,或者您可以通过编写在每个请求阶段与 Apache API 交互的组件来一路走下去。无论您使用 mod_perl 采用什么方法,都有一些常见的注意事项: 它是一个持久的过程,这意味着(简单来说)Perl 从一个请求到下一个请求,再到下一个请求,都保持驻留,这样您就可以消除启动成本。如果不进行一些清理和重构,CGI 脚本通常不能直接移植到 mod_perl。例如,由于脚本在持久环境中运行,全局变量不会在请求之间自行重置。有一整套“陷阱”需要克服。为此,Apache::Registry 在 mod_perl 环境中更容易处理,但代价是不能提供直接为 API 编程可以提供的 100% 的性能马力。尽管如此,这是一个很好的折衷方案。

另一种选择是 FastCGI,您可以在FastCGI 网站上阅读。

编写良好的 CGI 脚本可以通过一些努力移植到 mod_perl 或 FastCGI。出于这个原因,这些可能是最不痛苦的方法。一些脚本只需很少的清理就可以转换。其他人可能需要做很多工作,但应该仍然可以。

幸运的是,CPAN 上有大量有用的模块可以帮助您使用 mod_perl 或 FastCGI。例如,在 CPAN 上的 Apache::* 层次结构下,您会发现许多旨在与 mod_perl 一起使用的工具。关于 FastCGI,您甚至可以找到 Catalyst 和 Mojolicious 相关的模块来帮助融合两者,尽管最后两个建议可能需要一些真正的重构。

我发现 Practical mod_perl 作为一个起点很有帮助(一本 O'Reilly 的书)。

于 2011-06-08T09:52:42.933 回答
0

深思熟虑:mod_perl

于 2011-06-08T08:19:48.723 回答