1 votes

déploiements atomiques avec Nginx et PHP FPM

J'essaie d'obtenir des déploiements atomiques, je ne veux pas perdre/abandonner des demandes.

Je déploie le code en utilisant Capistrano, une situation classique où vous avez un répertoire 'courant' qui est un lien symbolique à la dernière version dans le dossier 'release'. J'utilise Nginx, PHP 5.5 FPM avec Opcache. En suivant l'idée d'utiliser $realpath_root dans Nginx, je m'attendais à ce qu'un simple rechargement de Nginx suffise, mais ce n'est pas le cas. Avec le rechargement de nginx, il semble que je ne perde aucune demande mais que php-fpm exécute toujours le code de l'ancien répertoire précédent. Si je fais un 'php-fpm reload', php-fpm lit le code à partir du nouveau répertoire, mais je vois toujours que je perds des requêtes :

recv() a échoué (104 : Connexion réinitialisée par l'homologue) lors de la lecture de l'en-tête de la réponse depuis l'amont

La question est la suivante : Dois-je recharger PHP FPM ou non ?

D'après ce que j'ai compris, nginx transmet le chemin à php-fpm et à partir du journal de débogage de nginx, je peux voir que le chemin transmis est le bon mais que php-fpm exécute toujours l'ancien.

2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/shop/www/htdocs/current/web"
2014/09/23 17:13:22 [debug] 26234#0: *1742 posix_memalign: 00000000010517A0:4096 @16
2014/09/23 17:13:22 [debug] 26234#0: *1742 http script copy: "SCRIPT_FILENAME"
2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/shop/www/htdocs/ive/releases/20140923124417/web"
2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/app.php"
2014/09/23 17:13:22 [debug] 26234#0: *1742 fastcgi param: "SCRIPT_FILENAME: /shop/www/htdocs/live/releases/20140923124417/web/app.php"
2014/09/23 17:13:22 [debug] 26234#0: *1742 http script copy: "DOCUMENT_ROOT"
2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/shop/www/htdocs/live/releases/20140923124417/web"
2014/09/23 17:13:22 [debug] 26234#0: *1742 fastcgi param: "DOCUMENT_ROOT: /shop/www/htdocs/live/releases/20140923124417/web"
2014/09/23 17:13:22 [debug] 26234#0: *1742 http script copy: "APPLICATION_ENV"

Qu'est-ce que j'ai manqué ?

0voto

Michael Hampton Points 232226

Il semble que vous ayez apporté des modifications à la configuration par défaut d'OPcache.

Les valeurs par défaut sont :

opcache.validate_timestamps = 1
opcache.revalidate_freq = 2

Ceci spécifie si et pendant combien de temps OPcache doit attendre avant de vérifier si un fichier sur le disque a été modifié. Dans ce cas, oui, et après deux secondes.

Tout d'abord, essayez de réactiver cette option, car il semble que vous l'ayez désactivée.

0 votes

Pourquoi ? opcache fonctionne avec realpath pour autant que je sache.

0 votes

En vérifiant ce que contient opcache, je peux voir différents chemins pour le même fichier, donc ça ne devrait pas être le problème... non ?

0voto

Kernelv5 Points 167

J'ai également été confronté à ce problème et j'ai finalement trouvé une solution.

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool.phar
$ chmod +x cachetool.phar

Vous pouvez vous connecter à un serveur fastcgi deviné automatiquement (si /var/run/php5-fpm.sock est un fichier ou 127.0.0.1:9000)

apc
  apc:bin:dump             Get a binary dump of files and user variables
  apc:bin:load             Load a binary dump into the APC file and user variables
  apc:cache:clear          Clears APC cache (user, system or all)
  apc:cache:info           Shows APC user & system cache information
  apc:cache:info:file      Shows APC file cache information
  apc:key:delete           Deletes an APC key
  apc:key:exists           Checks if an APC key exists
  apc:key:fetch            Shows the content of an APC key
  apc:key:store            Store an APC key with given value
  apc:sma:info             Show APC shared memory allocation information
opcache
  opcache:configuration    Get configuration information about the cache
  opcache:reset            Resets the contents of the opcode cache
  opcache:status           Show summary information about the opcode cache
  opcache:status:scripts   Show scripts in the opcode cache

Exemple :

    [root@ip-172-31-5-244 ~]# php cachetool.phar opcache:status
+----------------------+---------------------------------+
| Name                 | Value                           |
+----------------------+---------------------------------+
| Enabled              | Yes                             |
| Cache full           | No                              |
| Restart pending      | No                              |
| Restart in progress  | No                              |
| Memory used          | 42.71 MiB                       |
| Memory free          | 85.29 MiB                       |
| Memory wasted (%)    | 0 b (0%)                        |
| Strings buffer size  | 8 MiB                           |
| Strings memory used  | 5.31 MiB                        |
| Strings memory free  | 2.69 MiB                        |
| Number of strings    | 103847                          |
+----------------------+---------------------------------+
| Cached scripts       | 1261                            |
| Cached keys          | 2748                            |
| Max cached keys      | 7963                            |
| Start time           | Thu, 08 Feb 2018 02:28:56 +0000 |
| Last restart time    | Thu, 08 Feb 2018 03:10:19 +0000 |
| Oom restarts         | 0                               |
| Hash restarts        | 0                               |
| Manual restarts      | 1                               |
| Hits                 | 47839                           |
| Misses               | 1269                            |
| Blacklist misses (%) | 0 (0%)                          |
| Opcache hit rate     | 97.415899649752                 |
+----------------------+---------------------------------+
[root@ip-172-31-5-244 ~]#
[root@ip-172-31-5-244 ~]#
[root@ip-172-31-5-244 ~]# php cachetool.phar opcache:reset
[root@ip-172-31-5-244 ~]#
[root@ip-172-31-5-244 ~]#
[root@ip-172-31-5-244 ~]# php cachetool.phar opcache:status
+----------------------+---------------------------------+
| Name                 | Value                           |
+----------------------+---------------------------------+
| Enabled              | Yes                             |
| Cache full           | No                              |
| Restart pending      | No                              |
| Restart in progress  | No                              |
| Memory used          | 10.43 MiB                       |
| Memory free          | 117.57 MiB                      |
| Memory wasted (%)    | 0 b (0%)                        |
| Strings buffer size  | 8 MiB                           |
| Strings memory used  | 545.69 KiB                      |
| Strings memory free  | 7.47 MiB                        |
| Number of strings    | 103847                          |
+----------------------+---------------------------------+
| Cached scripts       | 0                               |
| Cached keys          | 0                               |
| Max cached keys      | 7963                            |
| Start time           | Thu, 08 Feb 2018 02:28:56 +0000 |
| Last restart time    | Thu, 08 Feb 2018 03:19:00 +0000 |
| Oom restarts         | 0                               |
| Hash restarts        | 0                               |
| Manual restarts      | 2                               |
| Hits                 | 0                               |
| Misses               | 2                               |
| Blacklist misses (%) | 0 (0%)                          |
| Opcache hit rate     | 0                               |
+----------------------+---------------------------------+

Vous pouvez remarquer que la mémoire, les clés de cache, les hits, tout est devenu 0 :-). C'est très utile. Je l'ai également intriqué avec Ansible facilement.

Son application pour l'apcu et d'autres trucs : Plus d'informations ici http://gordalina.github.io/cachetool/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X