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

Die Ruby VM (Virtual Machine) verwendet Garbage Collection (GC), um zu verhindern, dass der Prozess-Speicher ausgeht. Garbage Collection hilft dabei, zu verhindern, dass Ihre Anwendung aufgrund von Speichermangel ausfällt.

Dieser Prozess der Bereinigung ungenutzten Speichers in Ruby-Anwendungen kann jederzeit stattfinden. Um tiefere Einblicke darin zu erhalten, können Sie [Rubys Garbage Collection Profiler](https://ruby-doc.org/core/GC/Profiler.html) verwenden.

## Profiler

<Warning>
  Wir empfehlen nicht, den Garbage Collection Profiler in Produktionsumgebungen
  zu aktivieren, zumindest nicht über längere Zeiträume. Der zusätzliche
  Overhead des Profilers kann die Leistung Ihrer Anwendung negativ beeinflussen.
</Warning>

Wenn der Ruby Garbage Collection Profiler aktiviert ist, sammelt AppSignal automatisch Metriken für sein Ruby VM Magic Dashboard. Der Graph „GC time" zeigt, wie lange die Ruby VM gebraucht hat, um den ungenutzten Speicher zwischen den Messungen zu bereinigen. Dieser Graph zeigt Spitzen, wenn plötzlich deutlich mehr Speicher verarbeitet werden muss, zum Beispiel nach einer Aufgabe oder Anfrage mit hohem Speicherverbrauch. Der GC-Profiler ist standardmäßig deaktiviert, daher werden in diesem Graphen keine Metriken erfasst.

Um den GC-Profiler zu aktivieren, fügen Sie den unten gezeigten Code zu Ihrer Anwendung hinzu. Der Profiler kann zu jedem Zeitpunkt in der Anwendung aktiviert werden, etwa beim Start oder in Vorbereitung auf speicherintensive Operationen.

Sobald der GC-Profiler aktiviert ist, beginnt der Graph „GC time" nach mindestens zwei Minuten, Metriken anzuzeigen. Diese Metrik wird von unserem [Minutely-Probes](/ruby/instrumentation/minutely-probes)-System gemeldet, und es werden jede Minute neue Messungen vorgenommen.

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

Um den GC-Profiler vorübergehend zu aktivieren, stellen Sie sicher, dass Sie den Profiler anschließend wieder deaktivieren.

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

  # Do memory intensive operation

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

Damit das Ruby-Gem eine Dauer größer als null für die Garbage-Collection-Zeit meldet, muss der Profiler länger als zwei Minuten aktiviert sein. Dies ist die Anfangszeit, die das Ruby-Gem zur Messung der Garbage-Collection-Zeit benötigt. Wir empfehlen, das GC-Profiling länger als die minimalen zwei Minuten zu aktivieren, um vollständige Messungen für Vergleiche und Graphen sicherzustellen.
