> ## 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" }
]}
/>

La VM (machine virtuelle) Ruby utilise le ramasse-miettes (Garbage Collection, GC) pour éviter d'épuiser la mémoire du processus. Le ramasse-miettes aide à éviter que votre application ne souffre de pannes de mémoire en cas de manque de mémoire.

Ce processus de nettoyage de la mémoire inutilisée dans les applications Ruby peut se produire à tout moment. Pour obtenir plus d'informations à ce sujet, vous pouvez utiliser le [profileur de ramasse-miettes de Ruby](https://ruby-doc.org/core/GC/Profiler.html).

## Profileur

<Warning>
  Nous ne recommandons pas d'activer le profileur de ramasse-miettes dans les
  environnements de production, du moins pas pour de longues périodes. La
  surcharge supplémentaire du profileur peut avoir un impact négatif sur les
  performances de votre application.
</Warning>

Lorsque le profileur de ramasse-miettes Ruby est activé, AppSignal collecte automatiquement des métriques pour son magic dashboard Ruby VM. Le graphique « Temps GC » montrera combien de temps la VM Ruby a mis pour nettoyer la mémoire inutilisée entre les mesures. Ce graphique présentera des pics s'il doit soudainement traiter beaucoup plus de mémoire, par exemple après une tâche ou une requête à forte consommation de mémoire. Le profileur GC est désactivé par défaut, donc aucune métrique n'est rapportée dans ce graphique.

Pour activer le profileur GC, ajoutez le code ci-dessous à votre application. Le profileur peut être activé à tout moment dans l'application, par exemple au démarrage ou en prévision d'opérations gourmandes en mémoire.

Une fois le profileur GC activé, le graphique « Temps GC » commencera à afficher des métriques après au moins deux minutes. Cette métrique est rapportée par notre système de [sondes minute par minute](/ruby/instrumentation/minutely-probes) et de nouvelles mesures sont effectuées chaque minute.

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

Pour activer temporairement le profileur GC, assurez-vous de désactiver le profileur par la suite.

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

  # Do memory intensive operation

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

Pour que la gem Ruby signale une durée supérieure à zéro pour le temps de ramasse-miettes, le profileur doit être activé pendant plus de deux minutes. Il s'agit du temps initial nécessaire à la gem Ruby pour mesurer le temps de ramasse-miettes. Nous recommandons d'activer le profilage GC pendant plus longtemps que le minimum de deux minutes afin de disposer de mesures complètes nécessaires à la comparaison et au tracé.
