Lange Ladezeiten, opcache sollte aktiv sein, nextcloud bemängelt es

Hallo Community,

ich habe Nextcloud (20.0.7) auf meinem dedicatet Server installiert. Es ist ein folgendes System:

  • Intel Core i7-4770 (4Kerne, 8 Threads, 3,4 GHz)
  • 32 GB RAM
  • 2 x HDD SATA 2,0 TB

Auf dem Server läuft Ubuntu 20.04 und es sind ein paar wenig frequentierte Webseiten sowie ein noch ungenutzter Jitsi-Meet-Server drauf. Also sollte Leistung satt vorhanden sein.

Orientiert habe ich mich an der Anleitung von youtube zu Apfelcast Nectcloud 20 auf ubuntu 20.04

Da der LAMP-Server installiert war und PHP-fpm aktiv ist, bin ich mit der Anleitung (Textform des Videos) https://pastebin.com/MVUyx408
bei der Installation der PHP-Module eingestiegen.

Die Installation erfolgte ohne Probleme, die gemeldeten Probleme von Nextcloud unter: Einstellungen → Verwaltung: Übersicht habe ich größtenteils, dank der guten Anleitungen gelöst.

Einzig folgende Meldung verbleibt:

Es gibt einige Warnungen bei Deiner Systemkonfiguration.

  • Es wurde kein PHP-Memory-Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein >Memory-Cache konfiguriert werden. Weitere Informationen findest Du in der [Dokumentation].

Bitte überprüfe noch einmal die [Installationsanleitungen :arrow_upper_right:] und kontrolliere das [Protokoll] auf mögliche Fehler oder Warnungen.

Überprüfe die Sicherheit Deiner Nextcloud über [unseren Sicherheitsscanner :arrow_upper_right:]

Die erforderlichen Werte unter /etc/php/7.4/apache2/php.ini habe ich angepasst. Und laut phpinfo-Datei läuft der opcache von PHP, aber Nextcloud sieht das anders.

Für das Aufrufen der Seite benötigt er schon 20 sec und wenn man weiter navigiert bleibt es träge, das ist definitiv zu lang. Hat jemand von Euch einen Tip woran es liegen kann?

Viele Grüße und Danke für euer Wissen!

Christofer

Hast du den APCu Cache in der config.php aktiviert und konfiguriert? So wie es ausschaut deckt das die von dir verlinkte Anleitung nicht ab.

Nextcloud empfiehlt in ihrer Doku, APCu für den lokalen File-Cache und Redis für den lokalen Filelocking Mechanismus zu verwenden. Das ist etwas RAM-intensiver als Redis alleine, dafür aber performanter. Sollte aber bei dir kein Problem sein

Additional notes for Redis vs. APCu on memory caching

APCu und Redis zu installieren und zu aktivieren ist relativ einfach:

Benötigte Pakete installieren:

sudo apt install php-apcu redis-server php-redis

Redis für die Verbindung via Unix-Socket konfiguruieren:

sudo su
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
sed -i "s/port 6379/port 0/" /etc/redis/redis.conf
sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
sed -i "s/unixsocketperm 700/unixsocketperm 770/" /etc/redis/redis.conf
sed -i "s/# maxclients 10000/maxclients 512/" /etc/redis/redis.conf
usermod -aG redis www-data
sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf

Server neustarten:

reboot now

Die config.php öffnen…

sudo nano /var/www/nextcloud/config/config.php

…und folgendes einfügen:

'filelocking.enabled' => true,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
array (
    'host' => '/var/run/redis/redis-server.sock',
    'port' => 0,
    'timeout' => 0.0,
  ),

Danach evtl. nochmals Redis neu starten:

sudo systemctl restart redis

Die Redis-Konfig habe ich von hier:
https://www.c-rieger.de/nextcloud-installationsanleitung/#c04

Weitere Infos und Erklärungen findest du hier:
https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html#additional-redis-installation-help

Ich empfehle dir auch die folgende Sektion durchzulesen, um die Performance deines Servers noch weiter zu optimieren:
https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html?highlight=php%20fpm

Ich hoffe das hilft dir erst mal weiter.

EDIT:

Redis-Konfiguration ergänzt.

Obacht hier! Wenn Du PHP-fpm nutzt, dann greift hier nicht die php.ini unter /etc/php/x.x/apache2, sondern die unter /etc/php/x.x/fpm. Dort müsstest Du deine Anpassungen nochmal vornehmen.

3 Likes

Jup. Guter Punkt. Das sollte er auf jeden Fall tun, falls er das nicht schon getan hat…

APCu und/oder Redis muss er aber imho trotzdem noch installieren und konfigurieren. Es muss imho der OPcache und ein Memcache konfiguriert sein, wenn man keine Warnungen erhalten will. Es gibt nämlich jeweils seperate Warnungen für das eine und das andere, wenn ich mich jetzt nicht komplett täusche. Und die Warnung die @Christofer gepostet hat betrifft die fehlende Memcache-Konfiguration und nicht eine fehlenden OPcache-Konfiguration.

Aus meiner Doku:

sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/7.4/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/7.4/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/7.4/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/7.4/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/7.4/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/7.4/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/7.4/fpm/php.ini

Moin,

danke für den Hinweis, das nenne ich mal Support, super Rückmeldungen. Eure Hilfestellungen enthalten alles was ich wissen wollte, ganz großer Dank an Beide :heart_eyes:

Die php.ini unter /etc/php/x.x/fpm hatte ich schon gesehen und die hat mich verunsichert, damit ist es klar und eigentlich auch logisch.
Das große Latenzproblem hat aber nicht der opcache gelöst, ich konnte keine schnelleren Ladezeiten feststellen, aber der APCu-Cache brachte einen deutlichen Effekt und auch den Status grün in den Einstellungen unter “Verwaltung → Übersicht”.
Redis zickte erst noch rum, lief dann aber auch, ich musste nur den Socket Pfad aus der /etc/redis/redis.conf in der nexcloud config.conf anpassen:

‘redis’ => [
‘host’ => ‘/var/run/redis/redis-server.sock’,
‘port’ => 0,
‘dbindex’ => 0,
‘password’ => ‘secret’,
‘timeout’ => 1.5,
],

Danke schon mal. Zwei Fragen haben sich dann doch noch ergeben:

  1. Zu der APCu gibt es eine Warnung, was den Cronjob betrifft. Man soll --define apc.enable_cli=1 an den cronjob anhängen. Ist der folgende Eintrag damit korrekt:

crontab -u www-data -l

*/5 * * * * php -f /var/www/nextcloud/cron.php --define apc.enable_cli=1

  1. In der Anleitung Memory caching steht noch was zu “Memcached”. Der wäre doch nur wichtig wenn man Nextcloud auf mehreren Servern verwendet oder?

Danke und Gruß

Christofer

Hast du das “php-apcu”-Paket installiert und die folgende Zeile in der config.php der Nextcloud hinzugefügt…?

'memcache.local' => '\OC\Memcache\APCu',

Das sollte eigentlich reichen, um den lokalen Cache zu aktivieren. Einen speraten Cronjob dafür habe ich nicht aktiviert.

EDIT:
Meiner sieht so aus:
*/5 * * * * php -f /var/www/html/nextcloud/cron.php > /dev/null 2>&1

Es gibt drei Arten von memcaches:

  1. memcache.local: in meinem Beispiel mit APCu realisiert.
  2. memcache.locking: für Transactional file locking — Nextcloud latest Administration Manual latest documentation, wird in meinem Beispiel mit Redis realisiert.
  3. memcache.distributed: kann mit Redis oder Memcached realisiert werden, brauchst du aber, wie du richtig erkannt hast, für einen einzelnen Server nicht,

Auf einem Heimserver bringt dir vorallem der erste performancemässig viel. Wenn du meine Anleitung befolgt hast, ist Punkt 1. und 2. abgedeckt.

Bei der Installation der PHP-Pakete musst du allenfalls, falls du externe Quellen nutzt evtl. noch explizit die Version angeben. z.B.

sudo apt install php7.4-apcu anstatt sudo apt install php-apcu

Versuche doch mal:

nano /etc/php/7.4/apache2/php.ini

opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1