Système et versions :
Debian : 10 Buster # lsb_release -d
Nextcloud : 23.0.5 # sudo -u www-data php /var/www/nextcloud/occ -V
Php : 7.4 # php -v
Apache : 2.4.38 # sudo apache2 -v
MariaDB : 10.3.34 # mariadb –version
Message d’erreur complet :
« Le module PHP OPcache n’est pas correctement configuré. Veuillez regarder la documentation ↗ pour plus d’informations.
The OPcache interned strings buffer is nearly full. To assure that repeating strings can be effectively cached, it is recommended to apply opcache.interned_strings_buffer to your PHP configuration with a value higher than 16. »
Raison de la panne :
La valeur de la variable « opcache.interned_strings_buffer » est trop basse dû au grand nombre d’applications installées dans Nextcloud et aussi aux autres logiciels qui utilisent opcache, comme WordPress.
Solution :
Augmenter la valeur de la variable « opcache.interned_strings_buffer ».
On en profite aussi pour corriger la valeur d’autres variables opcache.
Valeurs recommandés :
Ces valeurs sont à adapter selon votre configuration.
opcache.memory_consumption=256 # ou 128
opcache.interned_strings_buffer=128 # ou 64 ( ! cette valeur doit toujours être inférieure à la variable précédente)
opcache.max_accelerated_files=32531
opcache.validate_timestamps=1
opcache.revalidate_freq = 60
opcache.enable_cli=1
Si, au lieu de baisser à 60 la revalidation (« opcache.revalidate_freq »), vous souhaitez la désactiver complètement, il faudra préférer :
opcache.validate_timestamps=0
Fichier concerné :
Il s’agit du fichier « php.ini »
Il y a d’autres fichiers possibles, comme « 10-opcache.ini », mais il semblerait que « php.ini » serait préférable.
Php_Version="7.4" && \
sudo cat /etc/php/"${Php_Version}"/fpm/php.ini
Script de modification automatique :
Voici un script à coller directement dans un terminal et qui effectue les modifications automatiquement.
Veiller à bien rectifier la version de php, ainsi que les nouvelles valeurs à entrer, et éventuellement le nom du fichier à modifier.
La liste des variables et des valeurs (« List_Variables_et_Valeurs ») est composé des variables suivi de leur valeur, exemple : ( « Variable1 » « Valeur1 » « Variable2 » « Valeur2 » … ).
echo && \
echo ===== && \
Php_Version="7.4"; echo -e "Php_Version = ${Php_Version}" && \
Fich_A_Mod="/etc/php/${Php_Version}/fpm/php.ini"; echo -e "Fich_A_Mod = ${Fich_A_Mod}" && \
echo ----- && \
echo && \
unset List_Variables && \
List_Variables_et_Valeurs=( "opcache.memory_consumption" "256" "opcache.interned_strings_buffer" "128" "opcache.max_accelerated_files" "32531" "opcache.validate_timestamps" "1" "opcache.revalidate_freq" "60" "opcache.enable_cli" "1" ) && \
echo -e "List_Variables_et_Valeurs = ${List_Variables_et_Valeurs[@]}" && \
Nbr_Variables_et_Valeurs=$(echo "${#List_Variables_et_Valeurs[@]} - 1" | bc) && \
echo -e "Nbr_Variables_et_Valeurs = ${Nbr_Variables_et_Valeurs}" && \
Indice=0 && \
echo && \
for (( Indice=0; Indice<="${Nbr_Variables_et_Valeurs}"; Indice++ )); \
do \
echo ----- && \
echo Indice = $Indice && \
echo List_Variables_et_Valeurs[$Indice]=${List_Variables_et_Valeurs[$Indice]} && \
echo List_Variables_et_Valeurs[$Indice+1]=${List_Variables_et_Valeurs[$Indice+1]} && \
Var=${List_Variables_et_Valeurs[$Indice]} && \
Nouv_Val=${List_Variables_et_Valeurs[$Indice+1]} && \
echo; echo Avant Modification : && \
sudo grep "${Var} \?=" "${Fich_A_Mod}" && \
sudo sed -i "/${Var} \?=/s/=.*/=${Nouv_Val}/g;/${Var} \?=/s/^;//" "${Fich_A_Mod}" && \
echo Après Modification : && \
sudo grep "${Var} \?=" "${Fich_A_Mod}"; echo && \
((Indice++)); \
done && \
echo "Redémarrage de php${Php_Version}-fpm.service et apache" && \
sudo systemctl restart php"${Php_Version}"-fpm.service && \
sudo systemctl restart apache2 && \
echo
Cette article est inspiré du site :
https://help.nextcloud.com/t/nextcloud-23-02-opcache-interned-strings-buffer/134007/30