gpt4 book ai didi

heroku - 在 Heroku 上运行时如何监控 New Relic 中的 resque worker?

转载 作者:行者123 更新时间:2023-12-04 10:04:55 24 4
gpt4 key购买 nike

我们有一个在 Heroku 上运行 resque workers 的应用程序。我们已经安装了 New Relic 插件,并根据 docs New Relic Agent 应该自动检测 resque 工作人员。但是,我们在 New Relic 仪表板上的“后台作业”选项卡上没有看到任何输出。

据同docs ,我们没有碰newrelic.yml文件。我们既不确定出了什么问题,也不确定如何有效地调试它。我们需要做什么?

最佳答案

原来我们的问题是由我们自己的自定义Resque.before_fork引起的。和 Resque.after_fork处理程序。
NewRelic 的 RPM gem 将自动设置 Hook Resque.before_forkResque.after_fork为 worker 建立沟通 channel 。作为 Resque 的限制,它仅将最后分配的 block /Proc 运行到 before_fork 和 after_fork Hook 。因此,如果您有自己的自定义 before_fork/after_fork 钩子(Hook),您 *必须 * 手动设置代理的通信 channel ,例如在 config/initializers/custom_resque.rb 文件中:

Resque.before_fork do |job|
NewRelic::Agent.register_report_channel(job.object_id)

# extra custom stuff here
end

Resque.after_fork do |job|
NewRelic::Agent.after_fork(:report_to_channel => job.object_id)

# extra custom stuff here
end
此代码直接取自 RPM gem 的文件 gems/newrelic_rpm-3.5.0/lib/new_relic/agent/instrumentation/resque.rb RPM 错误更新 2012 年 12 月 27 日:部署上述技术后,我们发现 RPM gem 在 fork 模式下使用时会泄漏文件句柄(例如 Resque)。我们观察到 ActiveRecord::StatementInvalid: ArgumentError: too large fdsets: SET client_min_messages TO '' 类型的错误消息.经过大量挖掘,我们发现这些是由于 ActiveRecord 尝试打开数据库连接而无法打开数据库连接时造成的,因为文件描述符的数量已用尽。 New Relic 在对解释计划进行抽样时确认代理存在错误。当运行大量连接到数据库的 Resque 作业时会发生这种情况。
错误更新 2013 年 1 月 28 日:经过一番摸索,我们发现这个错误是由与 resque-lonely_job 的不受支持的交互引起的。使用 Resque 的 gem before_perform可能会使用 Resque::Job::DontPerform 停止 Resque 作业的钩子(Hook)异常(exception)。在这种情况下,RPM 客户端无法正确清理并泄漏文件描述符。 New Relic 已被告知并正在修复。
错误更新 2013 年 4 月 10 日:这已得到修复。我们使用的是 3.6.0.78,它可以处理这种情况。不再有文件描述符泄漏!谢谢新遗物。

关于heroku - 在 Heroku 上运行时如何监控 New Relic 中的 resque worker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com