在ec2实例上使用nginx乘客的Rails app运行速度太慢

时间:2015-10-29 07:24:55

标签: ruby-on-rails nginx amazon-ec2 passenger

我在ec2-instance t2.small上使用nginx和passenger运行rails app,内存为2GB,内存为1 CPU。

应用程序包含开发模式下的狂欢和相关宝石。狂欢后端过去工作正常,但是自从过去3天以来,如果保持闲置一段时间,则需要花费太多时间来响应并且启动时间太长。我在nginx中尝试了各种乘客方法的组合,但没有帮助,所以我省略了这些,下面是当前场景中的nginx文件

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    passenger_root /usr/local/rvm/gems/ruby-2.2.1/gems/passenger-5.0.20;
    passenger_ruby /usr/local/rvm/gems/ruby-2.2.1/wrappers/ruby;
    passenger_app_env development;

    #added two lines for setting user group
    passenger_default_user root;
    passenger_default_group root;

    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    passenger_spawn_method smart;
    passenger_pool_idle_time 1000; 

    server {
        listen       80;
        server_name  localhost;
        root /var/www/html/apps/localfiles/public;
        passenger_enabled on;


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
        listen       80;
        server_name  abcd.com www.abcd.com;
    root /var/www/html/apps/abcd/ComingSoon;
    passenger_enabled on;
    }

    server {
        listen       80;
        server_name  xyz.com www.xyz.com;
        root /var/www/html/apps/xyz/ComingSoon;
        passenger_enabled on;
    }
}

任何有关nginx /乘客配置的正确组合的亮点都将受到高度赞赏。

更新:当我使用Spree API时,我需要点击一次API 3-4次以获得正确的响应,它在API调用之间经常抛出这个Web application could not be started。请帮助解决这个问题

1 个答案:

答案 0 :(得分:0)

数据库连接

根据我的经验,数据库连接是Rails应用程序的最大瓶颈。

我发现这主要来自Heroku,uses Amazon's EC cloud - 外部数据库严重会降低应用程序的速度。

-

您既没有提及您是否从数据库中提取,也未提及您正在使用的数据库设置。

数据库服务器距离您的Web服务器越远(地理位置),应用程序运行速度越慢。

我记得将我们的开发MYSQL数据库挂钩到我们的生产应用程序中,并等待3/5秒刷新;在同一数据中心安装数据库服务器将时间推迟到0.25秒。

我强烈建议您检查生产数据库

亚马逊提供了自己的MYSQL db functionality,我强烈建议您使用它。

如果您有预算,请使用RackSpace(他们在同一个数据中心拥有MYSQL服务器和Web服务器) - Rails应用程序可以快速运行。