【发布时间】: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