• EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

Criar um problema

Resque instrumentação

Além da própria aplicação web, o agente New Relic Ruby também pode instrumentar seus trabalhos Resque.

Capturando argumentos de trabalho

Começando com o agente Ruby versão 3.6.9, opcionalmente, você pode configurar o agente Ruby para capturar argumentos de trabalho Resque no rastreamento da transação e rastrear erros. Isto pode ser especialmente útil na tentativa de reproduzir trabalhos com falha. Por padrão, esse recurso fica desativado caso os argumentos do seu trabalho contenham informações confidenciais. Para ativar esse recurso, edite seu newrelic.yml conforme apropriado para a versão do seu agente:

  • Para newrelic_rpm 3.12.0 ou superior: attributes.include: job.resque.args.*
  • Para newrelic_rpm 3.6.9 a 3.11.X: resque.capture_params: true

Esse recurso é diferente da configuração genérica de nível superior capture_params , que controla se os parâmetros da solicitação HTTP são capturados no rastreamento da transação e rastreia erros para solicitações da Web. Você pode definir essas duas configurações de forma independente.

Resque versões 1.23.1 ou superior

Se você estiver executando o Resque 1.23.1 ou superior, não precisará fazer nenhuma alteração no código fora dos procedimentos normais de instalação do agente para que a instrumentação do Resque da New Relic funcione.

Exception: Se você tiver chamadas restantes para métodos NewRelic::Agent dos ganchos before_first_fork, before_fork ou after_fork do Resque de quando você estava executando uma versão mais antiga do Resque, certifique-se de remove essas chamadas após atualizar para o Resque 1.23 .1 ou superior.

Modos alternativos de bifurcação

As gemas resque-multi-job-forks ou resque-jobs-per-fork alteram o comportamento de bifurcação do Resque para que ele não bifurque para cada trabalho individual, mas sim bifurque uma vez por lote de trabalhos. Da mesma forma, você pode definir a variável de ambiente FORK_PER_JOB como false para desativar completamente a bifurcação no Resque.

Se você usar qualquer um desses modos de bifurcação alternativos em seu aplicativo, certifique-se de estar executando o agente Ruby version 3.9.7 or higher. Versões anteriores do agente Ruby não funcionam corretamente com esses modos alternativos de bifurcação. Se você estiver atualizando para a versão 3.9.7 ou superior, certifique-se de remover quaisquer chamadas diretas para métodos NewRelic::Agent como manual_start ou after_fork que você possa ter usado anteriormente para fazer o agente trabalhar nesses ambientes .

Versões antigas do Resque (<1.23.1)

É possível usar o agente Ruby da New Relic com versões do Resque anteriores a 1.23.1. No entanto, a New Relic recomenda que você atualize para o Resque 1.23.1 ou superior para obter melhores resultados.

Muitos aplicativos usam os ganchos expostos pelo Resque (before_fork, after_fork, etc.) para injetar código personalizado em pontos críticos durante a vida útil dos trabalhos do Resque. O agente New Relic Ruby também deve usar esses ganchos para poder posicionar sua instrumentação.

Versões do Resque anteriores a 1.23.1 não permitem que ganchos sejam definidos múltiplas vezes; a última definição terá precedência. Se você não puder atualizar para uma versão do Resque >= 1.23.1 (que permite que os ganchos sejam definidos várias vezes sem sobrescrever uns aos outros), você poderá modificar seus ganchos do Resque personalizados adicionando o código New Relic necessário. Aqui está um exemplo.

Example: Modifying custom Resque hooks

Você pode omitir definições para quaisquer ganchos para os quais não tenha código personalizado. Eles serão instalados automaticamente pelo agente neste caso.

Resque.before_first_fork do
# ... your custom hook code ...
NewRelic::Agent.manual_start(:dispatcher => :resque,
:sync_startup => true,
:start_channel_listener => true)
end
Resque.before_fork do |job|
# ... your custom hook code ...
NewRelic::Agent.register_report_channel(job.object_id)
end
Resque.after_fork do |job|
# ... your custom hook code ...
NewRelic::Agent.after_fork(:report_to_channel => job.object_id,
:report_instance_busy => false)
end

Trabalhos de impasse

Alguns clientes (particularmente aqueles com taxas de transferência de trabalho muito altas) relataram impasses intermitentes em seus processos de trabalho Resque com o agente Ruby habilitado. Esses impasses são devidos a uma interação incorreta entre o thread de segundo plano que o agente Ruby usa para enviar dados aos servidores New Relic e ao comportamento de bifurcação do Resque.

Use uma destas opções para resolver estes problemas:

  • Desative o comportamento de bifurcação do Resque definindo a variável de ambiente FORK_PER_JOB como false ao gerar processos do Resque.
  • Use a biblioteca resolv-replace da biblioteca padrão do Ruby para substituir o código de resolução DNS nativo do Ruby por uma versão Ruby pura.

O agente Ruby usa um thread de segundo plano no processo mestre Resque para enviar dados ao coletor New Relic. Em alguns ambientes, este thread irá adquirir um bloqueio nativo durante a resolução do DNS (ao resolver o nome do host do coletor New Relic).

Se esse bloqueio nativo for mantido pelo thread de segundo plano enquanto o thread principal do processo mestre Resque chama fork para criar um processo filho, ele ainda será marcado como retido no processo filho bifurcado. No entanto, como fork copia apenas o thread de chamada, o thread de segundo plano que continha o bloqueio nativo não existirá no processo filho e, portanto, o bloqueio nativo nunca será liberado. Se o processo filho tentar fazer qualquer resolução de DNS, ele tentará adquirir o mesmo bloqueio e deadlock nativos. Para evitar esse problema no Github, use resolv-replace em vez do caminho de resolução DNS padrão do Ruby.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.