将Perl模块加载到Nginx的内存中,以加快速度?

时间:2015-10-24 09:31:48

标签: perl nginx

我试图在 nginx 服务器上加速我的Perl脚本。在测试脚本中,如果我注释掉"使用"请求3 .pm 文件(所有这些都是他们自己的东西)...脚本丢失大约600毫秒的加载时间!现在我的猜测是因为它必须从所请求的子模块中加载子模块。例如:

use WebService::Solr;
use WebService::Solr::Query;
use Want::View;
use JSON;
use POSIX;

使用 mod_perl Apache 上,您可以设置启动脚本,以便"导入"将模块放入内存(使其更快)。 nginx和Perl有类似的可能吗?我的实时脚本目前需要1.1秒才能处理(其中800-900ms是#34;等待"它响应!!!!),所以我真的需要看到加速它。

更新:我发现了这一点,但它似乎无法运作:

http://search.cpan.org/~zzz/Nginx-Perl-1.2.9.7/src/http/modules/perl/Nginx.pm#DESCRIPTION

location ~ \.cgi$ {

    perl_inc     /usr/local/share/perl/5.20.2/;
    # perl_require WebService/Solr;

    ... rest

}

我收到错误:

  

nginx:[emerg]未知指令" perl_inc"在   /etc/nginx/sites-enabled/site.net:134

我想知道它是否因为我需要安装" Nginx" Perl模块。当我尝试通过MCPAN安装它时,我得到了一个骰子:

  

-lpthread -lcrypt -lcrypto -lcrypto -lz \   -Wl,-E -fstack-protector -L / usr / local / lib -L ​​/ usr / lib / x86_64-linux-gnu / perl / 5.20 / CORE -lperl -ldl -lm -lpthread -lc -lcrypt / usr / bin / ld:找不到-lperl collect2:error:ld返回1退出状态objs / Makefile:213:目标配方   ' OBJ文件/ nginx的-perl的'失败make [1]: * [objs / nginx-perl]错误1   make [1]:离开目录   ' /root/.cpan/build/Nginx-Perl-1.2.9.7-dbUMQF' Makefile:9:配方   目标' build'失败了:* [build]错误2
  ZZZ / Nginx-Perl-1.2.9.7.ta​​r.gz / usr / bin / make - 不行

谢谢!

2 个答案:

答案 0 :(得分:1)

好的,所以我们终于明白了。我在这里找到了一部分:

https://serverfault.com/questions/247355/how-do-i-configure-nginxs-embedded-perl-to-use-perl-modules

在配置nginx时,我们必须使用 --with-http_perl_module --with-perl_modules_path 标记重新编译它。然后,令人困惑的另一件事是你实际上如何称呼它。我找到的地方作为参考,谈论:

perl_lib 
perl_require

我认为可以放入网站配置文件的location { }部分 - 但事实证明需要进入核心的主要nginx.conf文件中:

http {
   perl_modules /usr/local/share/perl/5.20.2/;

   perl_require JSON.pm;
   perl_require POSIX.pm;

}

..块。

这样做,实际上似乎工作(重启nginx时没有编译错误)。我还有更多的测试要做,只是为了确保它确实做了一些事情 - 但从我所看到的,现在这是一个有效的解决方案。希望这对未来的其他人有所帮助!

更新:我真的没有看到加载时间的任何差异:(我的逻辑是perl_require将模块加载到内存中,然后通过脚本更快地访问它(经文)被加载到脚本本身)。这种理解是否正确?

答案 1 :(得分:0)

我认为你必须通过安装perl-dev或类似的包来修复cpan问题,包含C级perl绑定。将是nginx-extras,或者可能是,从启用了perl支持的源重建你的nginx。