> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Garbage Collection

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Ruby", version: "3.1.4" }
]}
/>

A Ruby VM (Máquina Virtual) usa Garbage Collection (GC) para evitar ficar sem memória de processo. O Garbage Collection ajuda a prevenir que sua aplicação sofra com falta de memória devido ao esgotamento da memória.

Este processo de limpar memória não utilizada em apps Ruby pode acontecer a qualquer momento. Para obter mais insights sobre isso, você pode usar o [profiler do Garbage Collection do Ruby](https://ruby-doc.org/core/GC/Profiler.html).

## Profiler

<Warning>
  Não recomendamos habilitar o profiler do Garbage Collection em ambientes de
  produção, pelo menos não por períodos prolongados. A sobrecarga adicional do
  profiler pode impactar negativamente o desempenho da sua aplicação.
</Warning>

Quando o profiler do Garbage Collection do Ruby está habilitado, o AppSignal coletará métricas automaticamente para seu magic dashboard da Ruby VM. O gráfico "GC time" mostrará quanto tempo a Ruby VM levou para limpar a memória não utilizada entre as medições. Esse gráfico terá picos se subitamente tiver que processar muito mais memória, como após uma tarefa ou requisição com alto uso de memória, por exemplo. O profiler de GC está desabilitado por padrão, portanto, nenhuma métrica é reportada nesse gráfico.

Para habilitar o profiler de GC, adicione o código mostrado abaixo à sua aplicação. O profiler pode ser habilitado a qualquer momento na aplicação, como durante a inicialização ou em preparação para operações intensivas em memória.

Uma vez que o profiler de GC esteja habilitado, o gráfico "GC time" começará a mostrar métricas após pelo menos dois minutos. Esta métrica é reportada pelo nosso sistema de [minutely probes](/ruby/instrumentation/minutely-probes) e novas medições são feitas a cada minuto.

<CodeGroup>
  ```ruby Ruby theme={null}
  GC::Profiler.enable
  ```
</CodeGroup>

Para habilitar o profiler de GC temporariamente, certifique-se de desabilitá-lo depois.

<CodeGroup>
  ```ruby Ruby theme={null}
  GC::Profiler.enable

  # Realiza uma operação intensiva em memória

  GC::Profiler.disable
  ```
</CodeGroup>

Para que a gem Ruby reporte qualquer duração acima de zero para o tempo de garbage collection, o profiler deve estar habilitado por mais de dois minutos. Este é o tempo inicial que a gem Ruby precisa para medir o tempo de garbage collection. Recomendamos habilitar o profiling de GC por mais do que o mínimo de dois minutos para garantir que tenhamos medições completas necessárias para comparar e gerar gráficos.
