Ruby并发性+使用Rails进行扩展

4
我们有一个社交网络网站,其运行方式为:
Stunnel->Haproxy->Nginx->Unicorn
我们在一台24核机器上运行了20个Unicorn进程。
当我使用200个请求和100个并发用户运行测试时,需要的时间如下:
50%的请求需要3694秒 66%的请求需要4524秒 75%的请求需要5444秒 80%的请求需要5923秒 90%的请求需要7676秒 95%的请求需要10007秒 98%的请求需要13841秒 99%的请求需要18110秒 100%的请求需要21987秒
我在日志中看到每个请求需要0.5秒才能完成,但是最后一个请求需要21秒才能完成。
如何使所有请求在最短的时间内(4-5秒)完成? 我应该修改我的Rails代码使其在0.10秒内完成,还是有其他方法可以更改服务器配置以使所有请求在5秒内完成?
1个回答

2

请记住,每个独角兽实例会占用约250Mb的内存。

因此,20个独角兽至少需要5 Gb的内存。如果超过了内存限制,它们会变得极其缓慢:休眠并重新加载Rails环境中的进程。

尝试减少独角兽服务器的数量并进行测试。


我们有一台32 Gb内存的机器..这是当前的内存状态。 总内存:33006148 kB 空闲内存:3812472 kB 已缓存:16727060 kB 交换区已缓存:25908 kB 交换区总大小:33542140 kB 可用交换区大小:33493212 kB - Srikanth Jeeva
可能你的CPU核心数量过少,无法支持太多的工作进程。请查看以下链接:http://serverfault.com/questions/369811/optimal-number-of-per-cpu-unicorn-processes - user1852788
抱歉,我们正在运行24个内核的机器。当我执行nproc命令时,它的输出是24。 - Srikanth Jeeva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接