【发布时间】:2014-07-15 19:19:38
【问题描述】:
我有一个 sidekiq 工作人员,它排队大约 15 到 20 个不同类型工作人员的工作。当我进入 New Relic 的事务时,每个排队的工作人员都需要 4-6 秒才能执行。我的 ActiveRecord 池为 25,Sidekiq 以 20 并发运行,有 1 个 Unicorn 进程。
我在 Rails 控制台中对这个工作人员进行了基准测试,代码不到 2 秒(它做了一些繁重的处理)。有了这个奇怪的 4-6 秒延迟,New Relic 会在 6 到 8 秒执行时获取该工作人员的事务。
我使用 NewRelic::Agent::MethodTracer 完成了慢工作人员的执行方法,分组的代码块试图更好地了解可能如此慢的工作,但 New Relic 仍然以 4 -6 显示工作人员在它到达任何分组块之前的几秒钟。
perform 方法中所有带有跟踪器的分组代码块每个都在 100 毫秒以下。
我不确定是什么原因导致每个工作人员出现这 4 到 6 秒的暂停 - 在运行 sidekiq 作业时,内存的使用率通常徘徊在 50 - 60% 左右(1 gig 时有 2 个数字海洋液滴),磁盘 I /O,并且 CPU 始终不会超过 60%。
我的应用在 Rails 4.1.4、Ruby 2.0、Postgres、Unicorn、Nginx 和 Redis 上运行
【问题讨论】:
标签: ruby ruby-on-rails-4 sidekiq newrelic