Une alerte Nextcloud sur la mémoire PHP ou OPcache ne se corrige pas en augmentant toutes les valeurs au hasard. memory_limit plafonne la mémoire utilisable par un script PHP. OPcache conserve du code PHP précompilé dans une zone de mémoire partagée. Les deux réglages sont distincts, et le serveur web peut charger un autre php.ini que les commandes occ ou les tâches cron.
La méthode sûre consiste à identifier le SAPI concerné, mesurer l’état actuel, modifier le bon fichier, recharger PHP-FPM ou le serveur web, puis contrôler l’interface d’administration et un parcours réel. Ce guide vise une instance administrée sur laquelle vous disposez d’un accès système. Pour l’architecture générale, commencez par le guide complet de Nextcloud.
Que signifient memory_limit et les réglages OPcache ?
Ces paramètres utilisent de la mémoire, mais pas pour le même usage.
| Réglage | Rôle | Erreur fréquente |
|---|---|---|
memory_limit | Limite appliquée à l’exécution d’un script PHP | Le confondre avec la RAM totale du serveur |
opcache.memory_consumption | Taille de la zone partagée réservée au bytecode PHP | L’augmenter sans lire son occupation |
opcache.interned_strings_buffer | Espace réservé aux chaînes répétées stockées par OPcache | Oublier que cette zone participe au dimensionnement d’OPcache |
opcache.max_accelerated_files | Nombre maximal de scripts conservés dans le cache | Se fier à une valeur copiée d’un autre serveur |
| APCu et Redis | Caches de données et de verrous utilisés par Nextcloud | Les confondre avec le cache de bytecode OPcache |
La documentation Nextcloud demande un memory_limit d’au moins 512M. Cette valeur reste une limite par processus d’exécution, pas une réservation unique pour toute l’instance. Le nombre de travailleurs PHP-FPM, la base de données, Redis, le système et les autres services doivent tenir dans la RAM réellement disponible.
OPcache évite de recompiler les fichiers PHP à chaque requête. Nextcloud indique qu’une alerte apparaît dans le panneau d’administration lorsqu’une limite de taille OPcache dépasse 90 % de sa capacité allouée. Il faut alors identifier la zone saturée avant de changer une valeur.
OPcache, APCu et Redis ne sont pas interchangeables
OPcache conserve du bytecode PHP. APCu fournit un cache local de données au processus PHP. Redis peut servir de cache distribué et de backend de verrouillage. Le guide APCu et Redis pour Nextcloud traite ces deux derniers composants séparément.
Quel php.ini Nextcloud utilise-t-il réellement ?
Un serveur peut charger plusieurs configurations PHP. Nextcloud distingue notamment le contexte web et le contexte CLI utilisé par occ et les tâches cron.
Sur Debian ou Ubuntu, les chemins ressemblent souvent à ceux-ci :
/etc/php/<version>/fpm/php.ini
/etc/php/<version>/apache2/php.ini
/etc/php/<version>/cli/php.ini
Ce sont des exemples, pas des chemins universels. Un conteneur, un paquet Snap, un panneau d’hébergement ou une image gérée peut employer une autre arborescence et ajouter des fichiers dans un dossier conf.d.
Pour le terminal, commencez par :
php --ini
php -r 'printf("ini=%s\nmemory_limit=%s\nopcache=%s\n", php_ini_loaded_file(), ini_get("memory_limit"), ini_get("opcache.enable"));'
Ces commandes décrivent le PHP CLI. Elles ne prouvent pas la configuration de PHP-FPM. Pour le contexte web, utilisez les informations PHP disponibles dans l’administration du serveur ou de Nextcloud. Si vous créez exceptionnellement une page phpinfo(), protégez-la, ne l’exposez pas publiquement et supprimez-la juste après le contrôle.
Relevez au minimum :
Loaded Configuration File;- les fichiers additionnels analysés ;
memory_limit;opcache.enable;opcache.memory_consumption;opcache.interned_strings_buffer;opcache.max_accelerated_files;opcache.save_comments;opcache.validate_timestampsetopcache.revalidate_freq.
Si la valeur affichée diffère du fichier principal, cherchez un fichier chargé après lui, une directive de pool PHP-FPM, un .user.ini, un réglage du panneau d’hébergement ou une variable fournie par le conteneur. Le guide de config.php Nextcloud explique la même logique de source effective côté application.
Comment régler memory_limit sans épuiser la RAM ?
Commencez par la recommandation Nextcloud de 512M, puis mesurez les opérations qui posent problème. Une indexation, une génération d’aperçu, une application photo ou une commande de maintenance peut consommer davantage qu’une simple consultation de fichier.
memory_limit = 512M
Ne passez pas directement à -1. Une limite illimitée autorise un script défaillant à consommer la mémoire disponible jusqu’à provoquer une panne plus large. Une valeur très haute n’accélère pas non plus les requêtes qui n’en ont pas besoin.
Le dimensionnement de PHP-FPM doit être traité séparément. Une méthode pratique consiste à réserver la RAM nécessaire au système, à la base, à Redis et aux autres services, puis à diviser le budget restant par la consommation moyenne réellement observée d’un travailleur PHP-FPM :
pm.max_children maximal = budget RAM pour PHP-FPM / RSS moyen d’un travailleur
Le RSS désigne la mémoire physique occupée par un processus. Mesurez-le pendant une période représentative, avec des synchronisations, des prévisualisations et des tâches de fond. La documentation Nextcloud propose notamment une mesure des processus PHP-FPM avant d’ajuster le pool.
Après le changement, testez au moins :
- l’ouverture d’un dossier contenant plusieurs types de fichiers ;
- un envoi de fichier de test ;
- une tâche
occreprésentative ; - le cron Nextcloud ;
- les journaux PHP-FPM, du serveur web et de Nextcloud à l’heure exacte du test.
Une limite mémoire PHP n’est pas une limite d’envoi. Pour un transfert volumineux, il faut aussi aligner upload_max_filesize, post_max_size, le serveur web et les éventuels proxys. Le guide des limites d’upload Nextcloud détaille cette chaîne.
Quelle base utiliser pour OPcache ?
L’image Docker officielle de Nextcloud 35 fournit un exemple utile de configuration. Elle active OPcache, réserve 128 Mio à sa zone principale, 32 Mio aux chaînes internées, accepte 10000 scripts, conserve les commentaires et fixe une revalidation à 60 secondes.
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 10000
opcache.save_comments = 1
opcache.revalidate_freq = 60
Ce bloc est un point de départ issu d’une image officielle, pas une valeur universelle pour chaque instance. Une installation avec de nombreuses applications peut dépasser la capacité de scripts ou de mémoire. Une petite instance ne gagne rien à réserver une zone démesurée.
opcache.save_comments = 1 doit rester activé. Nextcloud indique que les commentaires du code doivent être conservés. La revalidation demande un choix opérationnel : avec un intervalle plus long, un fichier modifié sur disque peut ne pas être repris immédiatement. Après une mise à jour de Nextcloud, d’une application ou d’une configuration OPcache, rechargez les processus PHP concernés avant de conclure à un défaut logiciel.

occ peuvent lire des fichiers PHP différents. OPcache doit être vérifié dans le contexte web qui sert réellement Nextcloud.Comment vérifier OPcache après le rechargement ?
Après avoir modifié un fichier PHP, validez sa syntaxe si nécessaire, puis rechargez le service qui exécute Nextcloud. Le nom exact dépend de la distribution et de la version de PHP.
sudo systemctl reload php8.5-fpm
Cette commande est un exemple. Identifiez d’abord l’unité active avec votre gestionnaire de services. Sous Apache avec mod_php, le service à recharger est Apache. Dans un conteneur, appliquez la procédure prévue par l’image et son orchestrateur plutôt qu’une commande de l’hôte qui ne touche pas le processus concerné.
Contrôlez ensuite les valeurs dans le contexte web, puis relisez l’aperçu d’administration Nextcloud. Si une alerte de taille OPcache reste présente, notez la ressource concernée : mémoire générale, chaînes internées ou nombre de scripts. N’augmentez que la limite réellement saturée et conservez une marge mesurable sous le seuil d’alerte.
Une commande CLI comme php --ri 'Zend OPcache' peut confirmer la présence du module pour le terminal. Elle ne valide pas le cache utilisé par PHP-FPM, surtout si OPcache est désactivé en CLI. Le résultat web et le redémarrage du bon pool restent déterminants.
Pourquoi l’alerte reste-t-elle visible ?
Le mauvais SAPI a été modifié
Le terminal affiche la nouvelle valeur, mais PHP-FPM charge un autre php.ini. Comparez les chemins, les fichiers conf.d et les versions de PHP. Le cron peut également continuer à utiliser l’ancienne configuration CLI. Le guide des tâches cron Nextcloud aide à vérifier le binaire réellement exécuté.
Un fichier chargé plus tard écrase la valeur
Un fichier d’image Docker, une configuration de panneau ou une directive de pool peut avoir priorité. Cherchez la valeur dans toutes les sources actives et corrigez la source déclarative, pas seulement le fichier rendu qui sera remplacé au prochain déploiement.
Les anciens travailleurs servent encore des requêtes
Une modification de php.ini ne change pas les processus déjà lancés. Rechargez PHP-FPM ou le serveur web, puis confirmez que les nouveaux processus utilisent la valeur attendue. En cas de mise à niveau, cette étape évite aussi un mélange entre le code présent sur disque et le bytecode conservé.
La mauvaise zone OPcache a été agrandie
Augmenter opcache.memory_consumption ne corrige pas automatiquement une saturation de opcache.interned_strings_buffer ou de opcache.max_accelerated_files. L’alerte d’administration doit guider le réglage précis.
La charge réelle dépasse le budget du serveur
Un memory_limit plus haut peut supprimer une erreur PHP tout en exposant une saturation globale si le pool accepte trop de travailleurs simultanés. Surveillez la RAM, le swap, les arrêts de processus et les délais PHP-FPM pendant la recette.
Quelle procédure appliquer en production ?
Voici un ordre qui limite les changements simultanés :
- relever l’alerte exacte et son heure ;
- identifier le PHP web, le PHP CLI et leurs fichiers chargés ;
- enregistrer les valeurs actuelles sans publier de page
phpinfo(); - mesurer la mémoire du pool PHP-FPM et l’occupation OPcache ;
- modifier une seule famille de paramètres ;
- recharger le service concerné ;
- vérifier les valeurs dans le contexte web ;
- exécuter un parcours navigateur, une commande
occet le cron ; - relire les journaux et la RAM ;
- documenter la valeur précédente et le retour arrière.
Un réglage réussi ne se résume pas à la disparition d’un bandeau. L’instance doit encore répondre pendant les synchronisations, les tâches de fond et les opérations qui avaient déclenché l’erreur.
Conclusion
Pour Nextcloud, partez d’un memory_limit d’au moins 512M, mais dimensionnez le pool PHP-FPM avec la RAM disponible et la consommation mesurée. Pour OPcache, vérifiez le contexte web, gardez opcache.save_comments = 1, puis ajustez seulement la zone qui approche de sa limite.
La plupart des alertes persistantes viennent d’un autre php.ini, d’un fichier prioritaire ou d’un service qui n’a pas été rechargé. Identifiez la source effective avant d’augmenter les valeurs.
Sources officielles
- Nextcloud Administration Manual : configuration PHP
- Nextcloud Administration Manual : réglage de PHP-FPM et OPcache
- Nextcloud Administration Manual : exigences système et mémoire
- Image Docker officielle Nextcloud 35 : réglages PHP et OPcache
- Manuel PHP : configuration d’OPcache
- Manuel PHP : directive memory_limit