Nextcloud meckert wegen nicht aktivem PHP OPcache

Hallo,

auf meinem System (Debian 9, Apache 2.4.25, PHP-FPM 7.0.27) kommt die berüchtigte Meldung “Der PHP-OPcache ist nicht richtig konfiguriert. Für eine bessere Leistung empfiehlt es sich folgende Einstellungen in der php.ini vorzunehmen: …”.

Eine PHP-Datei mit “phpinfo();” im gleichen Verzeichnis wie Nextcloud zeigt mir aber einen aktiven opcache an:

PHP Version 7.0.27-0+deb9u1
Server API FPM/FastCGI
Configuration File (php.ini) Path /etc/php/7.0/fpm
Loaded Configuration File /etc/php/7.0/fpm/php.ini

Zend OPcache
Opcode Caching Up and Running
Optimization Enabled
SHM Cache Enabled
File Cache Disabled
Startup OK
Shared memory model mmap
Cache hits 881029
Cache misses 1534
Used memory 46607192
Free memory 87463304
Wasted memory 147232
Interned Strings Used memory 5651904
Interned Strings Free memory 2736704
Cached scripts 1530
Cached keys 2892
Max keys 7963
OOM restarts 0
Hash keys restarts 0
Manual restarts 0

Wie erkennt Nextcloud denn einen aktiven opcache (anscheinend funktioniert das nicht immer zuverlässig)?

Viele Grüße, Eduard

Wahrscheinlich fehlen noch Einstellungen in der php.ini

opcache-config

https://docs.nextcloud.com/server/13/admin_manual/configuration_server/server_tuning.html?highlight=opcache

1 Like

Die Einstellungen habe ich bei mir (Ubuntu, 13.0.2, php 7.1) schon oft vorgenommen und geprüft, bekomme aber auch immer wieder diese Meldung angezeigt. Eine Lösung dafür hätte ich auch gerne.

Hast du eh die richtige php.ini bearbeitet?

php -i | grep "Loaded Configuration File"

Tatsächlich habe ich mit diesem Befehl eine php.ini gefunden, die im Verzeichnis etc/php/7.0/cli liegt.

Diese hatte die Einstellungen alle nicht. Ich habe sie bearbeitet, die Parameter eingeblendet und entsprechend gesetzt, dann neu gestartet, jedoch ohne Erfolg. Die Meldung in den Grundeinstellungen von NextCloud bleibt: Es ist kein php-Cache konfiguriert. Ein Schnelligkeitszuwachs habe ich auch nicht feststellen können.

Es wird auch bei mir die korrekte php.ini eingebunden:

Und nochmal: Eine PHP-Datei mit “phpinfo();” im gleichen Verzeichnis wie Nextcloud zeigt mir aber einen aktiven opcache an, siehe Beitrag oben.

Ich gehe davon aus, das alles korrekt läuft, nur die Prüfung in Nextcloud schlägt fehl - warum auch immer. Wenn Zeit ist, gucke ich mir mal den Code an, der die Prüfung durchführt.

@edm:
Hast du genau die Werte der Doku übernommen? Denn da steht "We recommend at least following settings:"
Ich vermute, dass wenn auch nur ein einziger Wert kleiner ist, als empfohlen, dann spuckt Nextcloud die Warnung aus. Ich habe das gerade mit einem Wert ausprobiert: wenn ich opcache.max_accelerated_files=9999 statt 10000 angebe, dann meckert Nextcloud, bei 10000 oder 10001 nicht.

@doctordre
etc/php/7.0/cli
Das ist die Datei für das Command-line-Interface von php. Nextcloud benutzt das nur für cron-jobs. Ich benutze php-fpm, da ist die zu bearbeitende Datei normalerweise /etc/php/7.0/fpm/php.ini

So richtig blicke ich da nicht durch. Es ist lt. Protokoll PHP 7.1 im Einsatz. Im Verzeichnis /cli und im Verzeichnis /fpm liegt eine php.ini. Bei mir unter /etc/php/7.0/apache2/php.ini, die die ich immer bearbeite, weil ich dachte dass NC mit dem Webserver Apache gekoppelt ist.

Welches ist denn jetzt die richtige? In allen steht - soweit ich sehen kann . das gleiche drin. Welche benutzt NC?

Und: Müsste man nicht auch an den Speichereinstellungen des Apache drehen können, um hier mehr Webserver-Performance rausholen zu können. NC ist bei mir die einzige Anwendung auf dem Webserver im Ubuntu.

@Bernie_O
Ja, du hast Recht, ich hatte opcache.max_accelerated_files=5000 angegeben. Mit 10000 funktioniert es und nextcloud meckert nicht mehr. Und selbt mit opcache.revalidate_freq=10 macht das System ohne Meldung mit (unterschiedliche Werte werden also unterschiedlich angemahnt). Da muss man erst mal drauf kommen ;-).

VIelen Dank für den Tipp.

1 Like

Mach es doch wie @edm:
Lege eine Datei teller.php mit folgendem Inhalt an:

<?php
phpinfo();
?>

Diese Datei kopierst du in dein nextcloud-Verzechnis und passt die Besitzrechte an.
Dann die Datei im Browser aufrufen. Da steht dann, welche php.ini benutzt wird.
Danach die Datei unbedingt wieder löschen.

So sieht es aus: Sieht für mich aus, als würde schon die richtige benutzt.

Die opcache.max_accelerated_files=10000 ist bei mir drin, ebenso opcache.revalidate_freq=10.
Und trotzdem meckert Nextcloud rum: “Es wurde kein PHP-Memory-Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein Memory-Cache konfiguriert werden.”

Dann läuft der vHost mit einer anderen php-Version.

Das verstehe ich nicht. Wie bekomme ich raus, mit welcher Version der läuft?

Diese php.ini wird in deinem Setup benutzt:
/etc/php/7.0/apache2/php.ini

opcache und PHP-Memory-Cache sind zwei verschiedene Stiefel. Wenn auf der Grundeinstellungsseite nix von opcache steht, dann funktioniert der opcache. Wie du einen PHP-Memory-Cache installieren kannst steht hier gut beschrieben:
https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html

Bei mir läuft es jetzt!
Bei mir gab es das Problem, dass bei den disable_functions “opcache_get_status” eingetragen war. Das dürft eine Standardeinstellung von Plesk sein.

1 Like

Einfach ‘memcache.local’ => ‘\OC\Memcache\APCu’, der config/config.php hinzufügen

Auf welcher Seite wird dies bei dir angezeigt? Ich benutze NC 18 im docker-image mit apache. Wenn ich im docker-image eingeloggt nach der php.ini suche finde ich zwei:

# find /|grep php.ini
/usr/local/etc/php/php.ini-production
/usr/local/etc/php/php.ini-development

aber in beiden ist der opcache auskommentiert:

# grep opcache.enable= /usr/local/etc/php/php.ini-production
;opcache.enable=1

Ich habe mich gefragt, ob das wohl enabled ist, aber ich habe schon herausgefunden, dass es in einer conf.d datei aktiviert ist:

# cat /usr/local/etc/php/conf.d/opcache-recommended.ini
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Ich kann in /etc/php keinerlei Dateien finden. Ich würde caching gerne aktivieren, da meine Seite unglaublich lange Ladezeiten hat, aber solange ich nicht auf die php.ini zugreifen kann…
Ich habe /etc/php als Volument gemountet (schreckliches Wort), erhalte aber nur einen leeren Ordern.

Edit: Es schein eine php.ini an diesem Ort zu geben. Warum diese im Volumen aber nicht auftaucht…?

Wäre besser gewesen, wenn du einen eigenen Thread gestartet hättest.

Aber such doch mal.

find /etc -name "php.ini"

Poste evtl. auch:

dpkg -l |fgrep php

und noch welches Linux-Derivat (Ubuntu, Debian, …) und welche Version du einsetzt.

uname -a
cat /etc/issue

Dann rausch meine Nextcloud install NC21 ab. Die Seiten koennen nicht mehr aufgerufen werden.
Wenn ich ’ memcache.local’ => ‘\OC\Memcache\APCu’ wieder ausdukumentiere geht wieder alles