需要指导 - 如何跟踪 nginx-docker-rails 性能问题
Posted
技术标签:
【中文标题】需要指导 - 如何跟踪 nginx-docker-rails 性能问题【英文标题】:Guidance needed - how to track nginx-docker-rails performance issue 【发布时间】:2015-05-21 08:00:22 【问题描述】:我的 Rails 应用程序使用 Docker 部署在 Amazon elastic beanstalk 上。 Web 请求流入 nginx Web 服务器,该服务器将它们转发到驻留在 docker 中的 Thin Rails 服务器。一路上的某个地方有一个瓶颈。每 50 个请求(左右)一次,我看到 nginx 报告的服务时间比 rails 瘦服务器报告的时间高 40 倍。
这是一个例子:
NGINX(7490 毫秒):
146.185.56.206 - 筒仓 [18/Mar/2015:13:35:55 +0000] "GET /needs/117.json?iPhone HTTP/1.1" 200 2114 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (Khtml, 像 Gecko) Chrome/40.0.2214.115 Safari/537.36" 7.490 7.490 .
THIN(Rails 服务器):171 毫秒
2015-03-18 13:35:48.349 [INFO] 方法=获取路径=/needs/117.json 格式=json 控制器=需要操作=显示状态=200 duration=171.96 view=109.73 db=29.20 time=2015-03-18 13:35:47
谁能提供一些指导如何解决这种情况?如何找到响应时间差异的来源?我猜它可能是 nginx 或 docker 或 Thin 或 linux。
【问题讨论】:
【参考方案1】:听起来其中一个瘦进程正在执行一项繁重的任务,而 nginx 仍在向忙碌的进程发送请求。如果在 Thin 中存在排队问题,请求本身将需要很短的时间来处理,但到达队列顶部需要更长的时间。因此,首先,在该请求之前或附近检查其他请求。
其次,如果您使用上游服务 (http://nginx.org/en/docs/http/ngx_http_upstream_module.html),显然您可以获取 $upstream_response_time 并尝试记录它。
第三,您还可以尝试在 dev/qa 中重现类似的设置并进行压力测试。如果您设法始终如一地重现它,您可以看到每个队列上的请求数(即http://comments.gmane.org/gmane.comp.lang.ruby.unicorn.general/848)。
【讨论】:
以上是关于需要指导 - 如何跟踪 nginx-docker-rails 性能问题的主要内容,如果未能解决你的问题,请参考以下文章