【问题标题】:Rails app running too slow with nginx passenger on ec2 instanceRails 应用程序在 ec2 实例上运行 nginx 乘客太慢
【发布时间】:2023-04-07 20:45:01
【问题描述】:

我在 ec2-instance t2.small 上使用 nginx 和乘客运行 rails 应用程序,具有 2GB RAM 和 1 个 CPU 核心。

应用包含开发模式下的大礼包和相关宝石。 Spree 后端过去可以正常工作,但从过去 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/passenger 配置的正确组合的说明将不胜感激。

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

【问题讨论】:

  • 我会使用像 newrelic 这样的应用程序监控工具检查整个应用程序。如果没有一些指标很难判断,如果机器整体有点慢,那么 nginx 工作人员、乘客工作人员、db 瓶颈很少。在任何情况下,我都与 newrelic 无关,但我真的建议至少在调整性能时使用它(提供免费版本)。
  • 嗨@JulianKaffke,谢谢你的信息,我一定会看看newrelic。但是现在,我现在得到的是这个非常奇怪的错误Web application could not be started,你能帮我解决这个问题吗?
  • 你有堆栈跟踪/完整的错误页面吗?

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


【解决方案1】:

数据库连接

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

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

--

您既没有提到您是否从数据库中提取数据,也没有提到您使用的是什么数据库设置。

数据库服务器离您的网络服务器越远(地理上),应用程序运行的越慢。

我记得将我们的开发 MYSQL 数据库挂接到我们的生产应用程序中,并等待 3/5 秒刷新;在同一个数据中心拥有数据库服务器将时间缩短到 0.25 秒。

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

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

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

【讨论】:

  • 感谢@rich-peck 提供了一些启发,我在与gem 'mysql2' 相同的实例上使用 mysql db,但是,我不确定 db 连接是否会导致此问题
  • 我不认为它会,但我想把它放在那里。你有我们可以看到的回购或实时应用的链接吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-21
  • 2015-07-19
  • 2016-08-25
  • 2018-05-01
  • 2011-04-26
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多