web-dev-qa-db-fra.com

APC -> APCu / OPCache, performances médiocres

J'ai un m3.xlarge Instance EC2 que j'ai mise à jour vers PHP 5.5.11 aujourd'hui.

Avec cette mise à jour, elle a écrasé php55-pecl-apc avec php55-pecl-apcu.

Après avoir lu et expérimenté, je comprends que APC a été remplacé par OPCache, à l'exception d'un magasin de valeurs clés qui peut être ramené avec APCu.

Après avoir modifié ma configuration pour quelque chose qui semble raisonnable, l'utilisation de Wordpress pendant la connexion est maintenant terriblement lente, au moins 300-900 ms pire (le front-end est mis en cache via du vernis et fonctionne parfaitement ... mais lorsque vous utilisez l'administrateur, il n'est délibérément pas mis en cache et lent comme le péché).

J'ai fait une série de repères lors de ma mise à niveau, sur un petit échantillon pour chaque étape. Cela s'est dégradé de plus en plus au fur et à mesure que j'ai continué.

  • APC (avant la mise à niveau) -->
  • OPCache + pas APCu -->
  • OPCache + APCu + WP Plugin pour APCu

En ce moment je traîne juste avec OPCache, et pas APCu.

  1. Comment puis-je obtenir les mêmes performances? J'ai adoré l'interface d'administration, j'ai adoré sa rapidité. Honnêtement, je ne vois pas du tout comment c'est une amélioration, c'est vraiment très déprimant ... à moins qu'il n'y ait une super bibliothèque à ma connaissance. Ce n'est certainement pas ce que j'ai, ou peut-être que ce n'est pas bien configuré.
  2. En supposant que la réponse au n ° 1 est "vous l'avez configuré comme des balles", cela vous dérangerait-il de jeter un coup d'œil à cela et de voir si cela est raisonnable?

Pour ma configuration, j'utilise le dernier wordpress, quelques gros plugins mais je ne peux pas les retirer car ils sont importants. Heureusement, le vernis prend en charge la plupart des travaux. J'ai 4 cœurs, 16 Go de mémoire, ~ 10 000 fichiers à la racine de mon site Web. Je n'ai pas non plus de vraies applications hardcore ou autre chose que wordpress, c'est une configuration assez vanille. Je pense que c'est tout pour des trucs qui pourraient aider.

Config:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.revalidate_path=0
opcache.save_comments=0
opcache.load_comments=0
opcache.fast_shutdown=1
opcache.enable_file_override=0
opcache.optimization_level=0xffffffff
opcache.inherited_hack=1
opcache.dups_fix=0
opcache.blacklist_filename=/etc/php-5.5.d/opcache*.blacklist
opcache.max_file_size=2M
opcache.consistency_checks=1
opcache.force_restart_timeout=180
opcache.error_log=/var/log/php-fpm/5.5/opcache.log
opcache.log_verbosity_level=1
opcache.preferred_memory_model=
opcache.protect_memory=0
28
Tallboy

En ce moment, vous vérifiez chaque fichier sur chaque demande de modification, ce qui n'est probablement pas ce que vous voulez sur un système de production.

Je le désactive généralement (n'oubliez pas de redémarrer le serveur Web après avoir apporté des modifications):

opcache.validate_timestamps=0

Alternativement, vous pouvez essayer de régler la fréquence sur autre chose que 0 et la garder activée:

opcache.validate_timestamps=1  
opcache.revalidate_freq=300

Cela ne devrait théoriquement vérifier les changements que toutes les 5 minutes.

16
knrdk

Vous avez aussi

opcache.consistency_checks=1

Ce qui, selon les documents, ralentira les performances. Éteignez ça.

opcache.consistency_checks integer

S'il est différent de zéro, OPcache vérifiera la somme de contrôle du cache toutes les N demandes, où N est la valeur de cette directive de configuration. Cela ne doit être activé que lors du débogage, car cela affectera les performances.

7
awhig

Du RFC qui était responsable de l'intégration d'OPCache dans PHP:

APC peut récupérer la mémoire des anciens scripts invalidés. APC utilise un gestionnaire de mémoire et peut récupérer la mémoire associée à un script qui n'est plus utilisé; Optimizer + fonctionne différemment et marque une telle mémoire comme "sale", mais ne la récupère jamais réellement. Une fois que le pourcentage sale dépasse un seuil configurable - Optimizer + se redémarre. Notez que ce comportement présente à la fois des avantages et des inconvénients en termes de stabilité.

Je suppose que vous atteignez le seuil qui déclenche le redémarrage du cache opcode.

Référence: https://wiki.php.net/rfc/optimizerplus#advantages_of_apc_over_optimizer

5
saboya