HOWTO · R
Erhöhen Sie den Speicher in R
Dieses Tutorial zeigt, wie Sie den Arbeitsspeicher in R erhöhen.
Auf dieser Seite
Wenn R meldet, dass kein Speicher zugewiesen werden kann, sollten Sie zunächst den verfügbaren Arbeitsspeicher des Computers von den Grenzen des R-Prozesses unterscheiden. R kann nicht mehr physischen Speicher nutzen, als das System bereitstellen kann; außerdem können das Betriebssystem oder ein Container eigene Ressourcengrenzen setzen. Eine Einstellung für R kann eine Prozessgrenze ändern, sofern sie unterstützt wird. Sie fügt keinen RAM hinzu und garantiert nicht, dass eine bestimmte Analyse in den verfügbaren Speicher passt.
Welche Möglichkeiten verfügbar sind, hängt von der R-Version, dem Betriebssystem und der Art ab, wie R gestartet wird. Prüfen Sie die Startdokumentation der installierten Version, bevor Sie eine Einstellung verwenden. Notieren Sie die genaue Fehlermeldung und ermitteln Sie die größten Objekte und speicherintensiven Arbeitsschritte. So lässt sich besser einschätzen, ob die Konfiguration, die Datengröße oder eine temporäre Kopie die Hauptursache ist.
Welche Grenzen den R-Speicher bestimmen
Ein R-Prozess benötigt Speicher für Objekte, Zwischenergebnisse, Pakete und den Laufzeitbetrieb. Beim Verbinden von Tabellen, Umformen von Daten oder Ändern von Datentypen kann zusätzlicher Speicher nötig sein, während die ursprünglichen Objekte weiterhin im Speicher liegen. Ein Datensatz, der auf die Festplatte passt, kann deshalb während einer Berechnung deutlich mehr Speicher beanspruchen.
Es gibt keinen einzelnen Wert für den „R-Speicher“, der alle Grenzen beschreibt. Physischer RAM, verfügbarer Swap- oder virtueller Speicher, der Prozessadressraum und ein R-spezifisches Heap-Limit sind unterschiedliche Beschränkungen. Welche davon gelten, hängt vom Betriebssystem und vom R-Build ab. Ein höheres R-spezifisches Limit hebt keine Systemgrenze auf; zugleich kann ein höheres Limit dazu führen, dass der Prozess Ressourcen beansprucht, die andere Programme benötigen.
Den Speicher für R unter Windows erhöhen
Übernehmen Sie ältere Anleitungen zu Windows-Verknüpfungen aus früheren R-Versionen nicht ungeprüft. Sehen Sie in der R-Konsole den Wert von R.version.string nach und prüfen Sie anschließend in der Start-Hilfe dieser Version, welche Optionen unterstützt werden. Die Dokumentation zu R-Befehlszeilenoptionen beschreibt die Startoptionen. Unterstützt die Dokumentation Ihrer Installation --max-vsize, ergänzen Sie den dort dokumentierten Wert im Befehl, mit dem R gestartet wird. Bei einer Verknüpfung fügen Sie die Option nach dem in Anführungszeichen gesetzten Pfad zu Rgui.exe ein; zwischen dem schließenden Anführungszeichen und der Option steht ein Leerzeichen. Lassen Sie den bestehenden Programmpfad und alle weiteren benötigten Argumente unverändert.
Die Änderung unter „Eigenschaften“ im Feld „Ziel“ beeinflusst, wie diese Verknüpfung R startet; sie erhöht nicht den physischen Speicher des Computers. Wenn Sie RStudio verwenden, konfiguriert eine Änderung an einer Rgui.exe-Verknüpfung nicht unbedingt die von RStudio gestartete R-Sitzung. Konfigurieren Sie den Starter, der die betreffende Sitzung tatsächlich startet, und starten Sie diese Sitzung neu, damit Startoptionen wirksam werden. Gehen Sie nicht davon aus, dass eine nicht unterstützte Option durch Administratorrechte wirksam wird.
Unterstützte Limits beim Start von R festlegen
Verwenden Sie nur eine Startoption oder Umgebungsvariable, die für Ihre R-Version und Plattform dokumentiert ist. Die Referenz zu Umgebungsvariablen im R-Administrationshandbuch beschreibt R_MAX_VSIZE; lesen Sie sie zusammen mit der Dokumentation zu R-Befehlszeilenoptionen, wenn Sie Startoptionen prüfen. Dokumentiert die installierte Version --max-vsize und R_MAX_VSIZE, können Sie diese zum Konfigurieren des Vektor-Heaps verwenden. Andernfalls sollten Sie nicht voraussetzen, dass diese Namen unterstützt werden. Der Wert bezeichnet eine Größe; das zulässige Format und die Einheiten entnehmen Sie der Dokumentation. Setzen Sie eine Startvariable, bevor Sie R starten. Eine Änderung innerhalb einer laufenden Sitzung konfiguriert diese Sitzung nicht neu.
Für einen einmaligen Start über eine POSIX-Shell lautet das Muster R_MAX_VSIZE=value R; für value müssen Sie das in Ihrer Installation dokumentierte Format verwenden. Dies ist ein Muster und kein konfiguriertes Limit, das Sie unverändert übernehmen sollten. Unter Windows setzen Sie eine dokumentierte Variable in der Umgebung, aus der R gestartet wird, oder übergeben die dokumentierte Option an den zuständigen Starter. Nehmen Sie nicht an, dass R_MAX_MEM_SIZE, --max-mem-size oder ulimit -v den Vektor-Heap von R steuert: Unterstützung und Wirkung unterscheiden sich je nach Plattform und Version. Eine Betriebssystemgrenze kann stattdessen den Prozess beschränken.
Nicht mehr benötigte Objekte mit gc() freigeben
R kann Speicher zurückgewinnen, den nicht mehr erreichbare Objekte belegen. Entfernen Sie Verweise auf große Objekte, wenn Sie sie nicht mehr benötigen. gc() fordert eine Speicherbereinigung an und gibt Speicherstatistiken aus. Die Funktion kann kein Objekt bereinigen, auf das noch verwiesen wird, kein Prozesslimit erhöhen und nicht garantieren, dass von R freigegebener Speicher dem Betriebssystem sofort als frei angezeigt wird.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
values <- seq_len(100000)
total <- sum(values)
rm(values)
gc()
print(total)
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 273719 14.7 660948 35.3 452023 24.2
Vcells 459142 3.6 8388608 64.0 1800334 13.8
[1] 5000050000
Die Statistiken der Speicherbereinigung unterscheiden sich je nach R-Build und Sitzung; das stabile Ergebnis dieses Beispiels ist die ausgegebene Gesamtsumme. In normalen Skripten löst R die Speicherbereinigung bei Bedarf selbst aus. gc() nach jedem Arbeitsschritt aufzurufen ist selten hilfreich und kann zusätzlichen Aufwand verursachen. Lassen Sie den Aufruf von rm() nur dann stehen, wenn das Objekt andernorts nicht mehr benötigt wird.
Änderung überprüfen und verbleibende Speicherfehler untersuchen
Starten Sie einen neuen R-Prozess, nachdem Sie eine Startoption oder Umgebungsvariable geändert haben. Prüfen Sie die installierte Version mit R.version.string und sehen Sie sich mit gc() die aktuellen Heap-Statistiken an. Vergleichen Sie die beobachtete Einstellung oder die Statistiken mit der Dokumentation dieser Version. Ein erfolgreicher Start allein beweist nicht, dass ein angefordertes Limit übernommen wurde. Beobachten Sie auch den Systemspeicher, da das Betriebssystem eine Speicherzuweisung weiterhin verhindern kann.
memory.limit() ist eine veraltete, Windows-spezifische Funktion. Die aktuelle Dokumentation von R-devel zu Speicherlimits in utils kennzeichnet sie als nicht mehr funktionsfähig. Verwenden Sie sie nicht, um den Speicher zu erhöhen, wenn dieser Status für Ihre Version gilt. Bei einer älteren Version sollten Sie deren Hilfe prüfen, bevor Sie sich darauf verlassen. Die Funktion ist keine allgemeine plattformübergreifende Einstellung. RStudio oder R mit erhöhten Rechten auszuführen stellt die Unterstützung nicht wieder her, wenn die Funktion nicht mehr verfügbar ist.
Bleibt der Fehler bestehen, notieren Sie die vollständige Meldung, die R-Version, die Plattform, den Starter und den fehlgeschlagenen Arbeitsschritt. Suchen Sie nach großen temporären Kopien, entfernen Sie nicht mehr benötigte Objekte, verarbeiten Sie Daten in Blöcken oder wählen Sie eine Darstellung, bei der nicht alle Daten auf einmal geladen werden müssen. Erwägen Sie ein höheres unterstütztes Vektor-Heap-Limit nur dann, wenn das System über ausreichende Ressourcen verfügt und die einschlägige Dokumentation die Option bestätigt. Keine Einstellung eines Limits kann garantieren, dass Speicherfehler bei jeder Arbeitslast verschwinden.