需要指导 - 如何跟踪 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 性能问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用视频对物体进行运动跟踪? [关闭]

核心数据 - 如何跟踪实体集的子集

python爬虫使用Cookie如何进行

需要一些关于如何正确使用机器人框架 SDK 的指导

查询监控现场变化

零基础学习hadoop到上手工作线路指导