Leistungsverbesserungen mit Memcached erreichen In-Memory-Caching beschleunigt Nextcloud-Installationen

Von Thomas Joos 5 min Lesedauer

Anbieter zum Thema

Memcached lässt sich als Dienst auch in kleineren und mittleren Nextcloud-Installationen in Betrieb nehmen, und kann dadurch die Zugriffe von Anwendern deutlich beschleunigen. Wir zeigen in diesem Beitrag, wie Memcached auf Ubuntu installiert und mit Nextcloud verbunden wird. Außerdem weitere Verbesserungen für Nextcloud, die sicherstellen, dass der Betrieb von Memcached überhaupt relevant ist.

Das Hinterlegen und Abholen von Daten lässt sich mit der In-Memory-Speicherlösung Memcached beschleunigen. Die Open-Source-Software ist auch mit Nextcloud nutzbar.(Bild:  Flo - stock.adobe.com)
Das Hinterlegen und Abholen von Daten lässt sich mit der In-Memory-Speicherlösung Memcached beschleunigen. Die Open-Source-Software ist auch mit Nextcloud nutzbar.
(Bild: Flo - stock.adobe.com)

Was bringt Memcached für Nextcloud?

Memcached ist ein leistungsfähiger, verteilter In-Memory-Caching-Dienst, der vor allem in skalierbaren Webanwendungen zur Reduktion der Latenz und Entlastung von Datenbank-Backends eingesetzt wird. Das ist ideal für den Betrieb von Nextcloud. Technisch basiert Memcached auf einem einfachen Key-Value-Store, der Daten direkt im Hauptspeicher hält, wodurch der Zugriff auf diese Daten nahezu in Echtzeit erfolgt. Der Dienst nutzt einen non-blocking Netzwerkstack und arbeitet nach einem asynchronen Ereignismodell, das durch das Epoll- oder Kqueue-System der zugrundeliegenden Betriebssysteme unterstützt wird, um die maximale Parallelität und Ressourcenauslastung zu gewährleisten.

Eine der zentralen Eigenschaften von Memcached ist die konsistente Hashing-Strategie, die eine gleichmäßige Verteilung der Daten über alle verfügbaren Serverknoten sicherstellt und gleichzeitig eine minimale Reorganisation der Daten erforderlich macht, wenn Knoten zum Cluster hinzugefügt oder entfernt werden. Diese Eigenschaft ist entscheidend für die horizontale Skalierbarkeit von Memcached-Clustern. Memcached lässt sich aber auch lokal betreiben.

Memcached verwendet eine slab-basierte Speicherallokation, bei der der verfügbare Speicher in Klassen fester Größe unterteilt wird. Diese Technik minimiert die Fragmentierung des Speichers und optimiert die Nutzung des verfügbaren Arbeitsspeichers. Bei der Ablage von Daten sorgt Memcached durch das LRU-Prinzip (Least Recently Used) dafür, dass ältere, weniger häufig genutzte Daten automatisch aus dem Cache verdrängt werden, wenn der Speicherbedarf neuer Daten die Kapazität des Cache übersteigt.

In produktiven Umgebungen wird die Persistenz oft durch eine separate, persistentere Speicherschicht sichergestellt, während Memcached als schneller Cache dient. Durch diese Architektur eignet sich Memcached ideal für den Einsatz in Systemen, bei denen schnelle und häufige Zugriffe auf Daten erforderlich sind, wie beispielsweise bei der Zwischenspeicherung von Ergebnissen teurer Datenbankabfragen oder bei der Speicherung von Session-Daten in verteilten Webanwendungen.

Memcached in Ubuntu/Debian installieren

Der einfachste Weg zur Installation von Memcached auf Ubuntu ist der folgende Befehl:

sudo apt install memcached libmemcached-tools -y

Nach der Installation kann die Installation über den folgenden Befehl überprüft werden:

memcached –version

Gestartet wird der Dienst mit:

systemctl start memcachedsystemctl enable memcached

Ob der Dienst gestartet ist, lässt sich mit dem folgenden Befehl überprüfen:

systemctl status memcached

Memcached für Nextcloud anpassen

Wenn der Dienst läuft, muss Memcached noch angepasst werden. Das erfolgt über die Konfigurationsdatei /etc/memcached.conf. In der Konfigurationsdatei sollte zunächst der Startspeicher von 64 MB auf mindestens 1.024 MB erhöht werden. Das erfolgt über den Parameter -m 1024. Liegt genügend Arbeitsspeicher vor, kann der Wert auch erhöht werden.

Bildergalerie
Bildergalerie mit 7 Bildern

www.conf und php.ini anpassen

Die Konfigurationsdatei von PHP erfordert ebenfalls Einstellungen, damit schlussendlich Verbesserungen mit Memcached auch etwas bringen. Die Datei www.conf ist im Verzeichnis der installierten PHP-Version zu finden, zum Beispiel in /etc/php/8.3/fpm/pool.d. Sinnvoll ist es hier bei pm.max_children den Wert auf mindestens 20 zu setzen, und bei pm.min_spare_servers den Wert ebenfalls auf 20 setzen, bei pm.max_spare_servers auf 60 bis 80. Das hängt letztlich von der Leistung der Hardware ab. Mit diesen Werten lässt sich die Leistung von Nextcloud in Verbindung mit Memcached, aber auch generell beschleunigen, wenn die Werte erhöht und angepasst sind.

Die Datei php.ini im Verzeichnis /etc/php/8.3/fpm bietet ebenfalls Verbesserungen für Nextcloud. Diese haben nichts direkt mit Memcached zu tun, aber wenn die Werte in der Datei php.ini nicht ideal sind, dann bringen schlussendlich die Optimierungen mit Memcached auch nicht viel. Zunächst sollte hier der Wert bei memory_limit auf mindestens 512M gesetzt werden, besser deutlich mehr, wenn der Server über genügend Arbeitsspeicher verfügt. Mit dem Standardwert kann Nextcloud noch nicht einmal sich selbst aktualisieren, weil der Arbeitsspeicher dafür nicht ausreicht. Das Gleiche gilt für upload_max_filesize. Auch hier sollte der Wert deutlich erhöht werden.

Leistungssteigerung mit OPcache

OPcache ist ein wichtiger Bestandteil zur Performance-Optimierung von PHP-basierten Anwendungen wie Nextcloud. Es handelt sich dabei um einen Bytecode-Cache, der die Zwischenspeicherung der kompilierten PHP-Skripte im Speicher ermöglicht. Dadurch wird vermieden, dass PHP bei jedem Seitenaufruf die Skripte erneut parsen und kompilieren muss, was die Ausführungszeit erheblich verkürzt. In einer Nextcloud-Installation trägt OPcache maßgeblich zur Reduktion der Latenzzeiten bei, insbesondere bei häufigen Zugriffen und großen Nutzerzahlen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Cloud Computing

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

Die Konfiguration von OPcache erfolgt in der php.ini und kann durch Parameter wie opcache.enable, opcache.memory_consumption und opcache.max_accelerated_files angepasst werden, um den Cache optimal an die Anforderungen der Nextcloud-Instanz anzupassen. Für eine optimale Performance sollte OPcache aktiviert sein und genügend Speicher zugewiesen bekommen, um die Kompilate aller häufig genutzten PHP-Skripte der Nextcloud-Installation im Cache zu halten. Dies reduziert die Serverlast und verbessert die Antwortzeiten, was insbesondere in größeren Installationen oder Umgebungen mit vielen gleichzeitigen Zugriffen von erheblichem Vorteil ist.

Bei opcache sollte opcache.enable auf „1“ gesetzt sein und kein Semikolon (;) vorhanden sein, der den Wert ausklammert. Außerdem sollte bei opcache.memory_consumption ebenfalls mindestens „512“ gesetzt sein, eher mehr. Sinnvoll ist darüber hinaus mindestens „96“ bei opcache.interned_strings_buffer. Der Wert bei opcache.max_accelerated_files sollte auch bei mindestens „100.000“ stehen. Bei opcache.max_wasted_percentage sollte der Wert auf etwa „15“ gesetzt sein. Interessant ist auch opcache.revalidate_freq mit einem Wert von „60“. Das sollte in der eigenen Umgebung aber getestet werden. Im unteren Bereich kann manuell der Wert opcache.jit=1255 gesetzt werden sowie opcache.jit_buffer_size=256M.

Bildergalerie
Bildergalerie mit 7 Bildern

config.php anpassen und Nextcloud für Memcached anpassen

Im Verzeichnis config der Nextcloud-Installation befindet sich die Datei config.php mit der sich die Leistung von Nextcloud deutlich verbessern lässt, auch in Verbindung mit Memcached. Zur Verbesserung der Leistung spielen zunächst die Cache-Parameter eine Rolle. Auch hier lassen sich weitere Einstellungen vornehmen:

'memcache.local' => '\OC\Memcache\APCu','memcache.distributed' =>'\OC\Memcache\Memcached','memcache.locking' => '\OC\Memcache\Memcached',);

Was ist Memcached?

Memcached ist ein freies und quelloffenes, leistungsstarkes, verteiltes Speicher-Objekt-Caching-System. Es ist allgemein einsetzbar. Speziell wurde es jedoch dafür entwickelt, dynamische Webanwendungen zu beschleunigen, indem es die Datenbanklast verringert.

Memcached ist ein In-Memory Key-Value Store für kleine Datenblöcke (Zeichenfolgen, Objekte) aus Ergebnissen von Datenbankabfragen, API-Aufrufen oder Seitenrendering.

Der unter BSD-veröffentlichte, leistungsstarke Cache-Server lässt sich schnell implementieren und erleichtert die Entwicklung, um viele Probleme großer Datenchaches zu lösen. Seine API ist für die meisten gängigen Programmiersprachen verfügbar.

(ID:50171447)