【问题标题】:Apache and Passenger performance on AWSAWS 上的 Apache 和乘客性能
【发布时间】:2018-01-15 23:59:29
【问题描述】:

我在 AWS 上看到一个奇怪的问题,我希望看看是否有人对它有任何见解?

设置:
t2.medium 实例在 raid0 组中使用 3 个 EBS GP2 卷
弹性疼痛(memcached) 本地 mysql 配置为从 raid 组运行
Ubuntu 14.04
阿帕奇 2.4.7
乘客 5.1.7
日志被发送到 papertrail,而不是写入本地磁盘

测试:

测试是从 AWS 中的 t2.micro 实例上的 jmeter 运行的,该实例访问主页、登录、查看个人资料页面,然后注销。在登录和个人资料视图中进行了数据库查询,但 mysql 似乎不是瓶颈。

测试配置1: mpm_event.conf

<IfModule mpm_event_module>
StartServers        10
MinSpareThreads     75
MaxSpareThreads     250
ThreadLimit     128
ThreadsPerChild     32
MaxRequestWorkers   1984
ServerLimit     800
MaxConnectionsPerChild  0
</IfModule>

passenger.conf 看起来像这样:

<IfModule mod_passenger.c>
PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
PassengerDefaultRuby /usr/bin/passenger_free_ruby
PassengerMaxPoolSize 30
PassengerPoolIdleTime 150
PassengerPreStart *** points to host in /etc/hosts ***
PassengerMaxRequestQueueSize 500
</IfModule>

因此,上述配置不会导致错误(部分是由于 RequestQueueSize 的增加),但响应在测试结束时需要 90 秒(!)以北。

现在,如果我将乘客的配置更改为:

<IfModule mod_passenger.c>
PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
PassengerDefaultRuby /usr/bin/passenger_free_ruby
PassengerMaxPoolSize 2
PassengerPoolIdleTime 150
PassengerPreStart *** points to host in /etc/hosts ***
PassengerMaxRequestQueueSize 500
</IfModule>

响应时间更快,将它们降低到 60 秒,这仍然很慢,但要好得多。

我在监控(使用 htop、iotop、iftop、mytop、free -m 和乘客状态)时看到的是乘客状态中的队列从测试开始就稳定增长,如果有 100 个队列限制为标准,它会开始处理 503 错误,但是当队列增加时,请求队列会很长时间。

Passenger-enterprise 对我来说并不是一个真正的选择。

我在这里对乘客配置或 mpm 做错了,对吗?这台服务器应该能够处理 600 多个连接并在 1.3 秒内做出响应(我在 Brightbox 的服务器上运行了相同的测试,比较起来性能非常好)

我愿意接受任何建议。

注意:

我已经计算了乘客的内存使用情况,应该是 35,我使用了 30 来不完全最大化 RAM,因为没有运行交换,因为当它碰到它时更糟。

【问题讨论】:

    标签: ruby-on-rails apache amazon-web-services passenger


    【解决方案1】:

    这里是乘客作者。这听起来像是您在应用程序内部或背后遇到了一些瓶颈。如果您的应用程序无法足够快地处理请求,那么乘客请求队列会不断增长直到达到极限是正常的。然后,您增加队列的次数越多,您对队列末尾的响应就越慢也是正常的。

    更多的进程使事情变得更慢听起来你的进程正在争夺只支持非常低并发的共享资源。那可能是数据库,但您已经排除了这一点。它可能是您调用的 Web 服务。可能是文件锁。在不了解您的应用程序的情况下,我无法确定问题到底是什么,但至少看起来乘客不是问题。

    【讨论】:

    • 我将补充一点,使用 rack-mini-profilerflamegraphs gem 分析您的 web 应用程序是找到这些瓶颈的好方法。 (我链接的火焰图宝石是我自己的叉子,更容易阅读和解释)。
    猜你喜欢
    • 2011-01-07
    • 2013-01-28
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多