【发布时间】:2012-11-10 14:44:26
【问题描述】:
我们有一个流行的 iPhone 应用程序,人们可以在其中像 Wordfeud 一样互相决斗。我们今天有近 100 万注册用户。
在高峰时段,应用程序的响应时间非常长,而且超时时间也非常多。我们试图找到瓶颈,但很难做到。 所有服务器上的 CPU、内存和 I/O 都低于 50%。该问题仅在高峰时段出现。
我们的设置
1 VPS with nginx (1.1.9) as load balancer
4 front servers with Ruby (1.9.3p194) on Rails (3.2.5) / Unicorn (4.3.1)
1 database server with PostgreSQL 9.1.5
数据库日志没有显示足够长的请求时间来解释 nginx 错误日志中显示的所有超时。
我们还尝试直接在前端服务器上构建和运行应用程序(在所有其他用户都在负载平衡器上运行的高峰时段)。令人惊讶的是,即使在高峰时段,绕过负载均衡器的应用程序也能如子弹般快速。
NGINX 设置
worker_processes=16
worker_connections=4096
multi_accept=on
Linux 设置
fs.file-max=13184484
net.ipv4.tcp_rmem="4096 87380 4194304"
net.ipv4.tcp_wmem="4096 16384 4194304"
net.ipv4.ip_local_port_range="32768 61000"
为什么应用如此快速地绕过负载平衡器? nginx 作为负载均衡器会成为瓶颈吗? 有什么好的方法可以比较 nginx 中的超时和 unicorns 中的超时,看看问题出在哪里?
【问题讨论】:
-
我理解平衡器在虚拟化下工作,而前端和数据库服务器是硬件?
-
所有服务器都是虚拟化的,没有一个是硬件。
-
性能和虚拟化是不相容的概念。 nginx 错误日志中有什么内容?
标签: ruby-on-rails performance postgresql nginx