> ## 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.

# Ruby VM

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.3.9" },
{ name: "Ruby", version: "3.2" }
]}
/>

Die Ruby VM (Virtual Machine) plant die Ausführung von Ruby-Threads. Zu jedem Zeitpunkt kann nur ein Thread gleichzeitig mit dem Zustand der Ruby VM interagieren.

AppSignal unterstützt die Ruby VM sofort. Wenn AppSignal Ruby-VM-Metriken erkennt, wird ein [Magic Dashboard](#magic-dashboard) erstellt, mit dem Sie zentrale Metriken visuell überwachen können.

## Magic Dashboards

Magic Dashboards erscheinen im Dashboard-Bereich der AppSignal-App.

<img src="https://mintcdn.com/appsignal-715f5a51/4TRZP0Sq9Zq7PAPW/assets/images/screenshots/ruby/integrations/ruby-vm/dashboard-created.png?fit=max&auto=format&n=4TRZP0Sq9Zq7PAPW&q=85&s=fae0dd2e21d593846e3567eeef14efe1" alt="Ruby VM magic dashboard creation" width="2548" height="1430" data-path="assets/images/screenshots/ruby/integrations/ruby-vm/dashboard-created.png" />

Das Ruby VM Magic Dashboard enthält die folgenden Graphen:

| Graph                                                       | Metriken                                                                                                                        | Tags                                 |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| [Allokierte Objekte](#allocated-objects-graph)              | `allocated_objects`                                                                                                             | `hostname`                           |
| [Garbage Collection Count](#garbage-collection-count-graph) | <li>`minor_gc_count`</li> <li>`minor_gc_count`</li> <li>`gc_count`</li>                                                         | <li>`metric`</li><li>`hostname`</li> |
| [Heap-Slots](#heap-slots-graph)                             | <li>`heap_live`</li> <li>`heap_free`</li>                                                                                       | <li>`metric`</li><li>`hostname`</li> |
| [Ruby VM](#ruby-vm-graph)                                   | <li>`class_serial`</li><li>`global_constant_state`</li><li>`constant_cache_invalidations`</li><li> `constant_cache_misses`</li> | <li>`metric`</li><li>`hostname`</li> |
| [Thread Count](#thread-count-graph)                         | `thread_count`                                                                                                                  | `hostname`                           |

Tags geben Ihnen eine kontextbezogene Aufschlüsselung der Performance-Informationen der Ruby VM. AppSignal meldet die folgenden Tags für die Ruby-VM-Performance:

| Name       | Beschreibung                                           |
| ---------- | ------------------------------------------------------ |
| `hostname` | Der Name des Hosts, von dem die Metrik gemeldet wurde. |
| `metric`   | Der gesamte Metrikwert für alle Hosts.                 |

AppSignal stellt jedes Tag mit einer farbigen Linie im Graphen dar:

<img src="https://mintcdn.com/appsignal-715f5a51/4TRZP0Sq9Zq7PAPW/assets/images/screenshots/ruby/integrations/ruby-vm/gc-count-graph.png?fit=max&auto=format&n=4TRZP0Sq9Zq7PAPW&q=85&s=2aea582a012bc62c561298e9c97a992d" alt="Ruby VM magic dashboard example graph" width="1432" height="672" data-path="assets/images/screenshots/ruby/integrations/ruby-vm/gc-count-graph.png" />

### Graph der allokierten Objekte

Der Graph der allokierten Objekte zeigt, wie viele komplexe Ruby-Werte (Objekte, nicht Strings, Integer, Booleans usw.) Speicher in der virtuellen Ruby-Maschine verwenden.

Sie können den Graphen der allokierten Objekte verwenden, um die Speichernutzung und Performance Ihrer Anwendung zu überwachen und zu optimieren.

### Garbage-Collection-Count-Graph

Der GC-Counts-Graph zeigt die Anzahl der Garbage-Collection-Ereignisse/Läufe innerhalb der letzten Minute, aufgeteilt zwischen Major- und Minor-Ereignissen.

Sie können den GC-Counts-Graphen verwenden, um die Häufigkeit der Garbage Collection und deren Auswirkungen auf die Performance und Speichernutzung Ihrer Anwendung zu überwachen.

### Heap-Slots-Graph

Der Heap-Slots-Graph zeigt die aktuell von der virtuellen Ruby-Maschine allokierten Heap-Slots, aufgeteilt zwischen aktiven und freien Slots.

Sie können den Heap-Slots-Graphen verwenden, um die Speicherallokation zu überwachen und mögliche Ursachen für Memory Leaks oder Fragmentierung zu identifizieren.

### Ruby-VM-Graph

<Warning>
  Die Metriken `constant_cache_misses` und `constant_cache_invalidations` sind
  nur in Ruby-Versionen 3.2.0 und höher verfügbar.
</Warning>

Der Ruby-VM-Graph zeigt Statistiken aus der Methode RubyVM.stat über den Konstanten-Cache und die in Ihrer Anwendung erstellten Klassen.

Sie können den Ruby-VM-Graphen verwenden, um den Cache-Status von Konstantenwerten zu überwachen und zu sehen, wie Ihre Anwendung den Zustand der Ruby VM beeinflusst.

### Thread-Count-Graph

Der Thread-Count-Graph zeigt die Anzahl der aktuell in Ihrer Anwendung laufenden Threads.

Sie können den Thread-Count-Graphen verwenden, um das Threading Ihrer Anwendung zu überwachen. Das Ruby VM Lock arbeitet seriell, was bedeutet, dass nur jeweils ein Thread ausgeführt werden kann. Eine hohe Thread-Anzahl kann zu Performance-Problemen führen.
