WampServer

Apache, PHP, MySQL on Windows 

 
  • Accueil forum
  • Retour à WampServer
  • presentation
  • Download
  • Addons
  • Formations
  • Alter Way

 
Voir le sujet: Précédent•Suivant
Aller à : Liste des Forums•Liste des messages•Nouvelle discussion•Recherche•Connexion•Imprimer la vue
Augmenter le nombre de connexions simultanées
Envoyé par: JerryCbn (---.subs.proxad.net)
Date: 18 March 2020 à 18:50

Bonjour,

Je travaille sur WAMP 3.1.8, virtualisé avec 2 CPU et 4 Go de RAM.

J'ai besoin de faire des tests de connexions à plusieurs instances.
J'ai remarqué que je ne peux pas dépasser 2 traitements simultanés.
Si je lance une 3ème requête (depuis n'importe quel navigateur) vers un php , alors elle ne débutera que lorsque l'une des 2 premières aura abouti.

J'ai eu beau décommenter le httpd-mpm.conf dans httpd.conf, et jouer sur les différentes valeurs du mpm, rien n'y fait.

Fait étrange, j'ai alors tenté d'ajouter 2 CPU de plus à la VM. Et là, miracle, j'ai pu avoir 4 requêtes simultanées. Quand je parle de requête, il s'agit d'un simple php contenant :

print "Debut" . "\r\n";
ob_flush(); flush();
$t = microtime(true);
while (microtime(true) - $t < 5) { }
print "Fin.";


Le 5ème fichier n'a démarré que lorsque le 1er s'est terminé. Le nombre maximal de traitements simultanés dépend donc directement du nombre de CPU.

Comment augmenter cela sans ajouter des CPU ?


Bien cordialement !

Jérémy

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: Otomatic (Modérateur)
Date: 18 March 2020 à 20:41

Bonjour,

Déjà, un serveur sur une VM a — de base — avoir des limites de connexion qui doivent être paramètrables dans les propriétés de ladite VM.

Voir la documentation Apache à ce sujet et si cette documentation aborde le sujet des VM !

Pour information, par défaut, au démarrage, Apache crée un processus parent et 64 processus enfant
AH00418: Parent: Created child process 8536
AH00354: Child: Starting 64 worker threads.

ce qui m'entraine encore plus à penser que la limite est effectuée par votre VM.

À toutes fins utiles, dans le fichier httpd.conf, juste après AcceptFilter https none vous pouvez ajouter :
AcceptFilter https none

# The ThreadStackSize directive sets the size of the stack (for autodata)
# of threads which handle client connections and call modules to help process
# those connections. In most cases the operating system default for stack size
# is reasonable, but there are some conditions where it may need to be adjusted.
# Apache httpd may crash when using some third-party modules which use a
# relatively large amount of autodata storage or automatically restart with
# message like: child process 12345 exited with status 3221225725 -- Restarting.
# This type of crash is resolved by setting ThreadStackSize to a value higher
# than the operating system default.
ThreadStackSize 8388608

Mais je doute fortement que ça résolve votre problème.

Nota : Si les paramètres Apache de Wampserver limitaient les connexions à deux simultanées, je pense que ça se saurait depuis longtemps.

---------------------------------------------------------------
Documentation Apache - Documentation PHP - Documentation MySQL - Wampserver install files & addons

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: JerryCbn (---.subs.proxad.net)
Date: 19 March 2020 à 09:14

Bonjour otomatic, merci pour cette réponse.

Cela m'étonne pour la VM car l'OS virtualisé ne sait pas qu'il l'est, Apache encore moins, et il n'y a pas de paramétrage particulier pour limiter les connexions (quelles connexions d'ailleurs ?).
La seule interaction que l'on peut faire (VMware Workstation) agit sur le réseau (limiter la bande passante, simuler une latence ou un taux de pertes, ou modifier l'adresse MAC).

Pour écarter la thèse de l'hyperviseur, j'ai fait le même test sur une machine physique, non virtualisée.

Il s'agit également d'un WAMP 3.1.8, Apache 2.4.37.

Le CPU est un Ryzen 5 1600X. C'est un 6 coeurs SMT, soit 12 threads.

J'ai porté l'attente du script à 30 secondes, pour me laisser le temps d'ouvrir suffisamment de navigateurs différents (Google Chrome). Il faut savoir que Chrome limite à 6 connexions simultanées pointant vers le même domaine, j'ai donc ajouté les lignes "127.0.0.1 localhost2" et "127.0.0.1 localhost3" au lmhosts.

- dans une première fenêtre, j'ouvre 6 onglets utilisant localhost
- dans une seconde fenêtre, 6 autres onglets utilisant localhost2
- 3ème fenêtre avec 6 autres onglets localhost3

Verdict :

- les 12 premiers onglets s'exécutent de façon simultanée (tous les onglets affichent "Début" )
- les 6 onglets de la 3ème fenêtre n'ont commencé leur chargement (affichage de "Début" ) uniquement après la fin d'exécution de chacun des 6 premiers onglets de la première fenêtre.

C'est vraiment flagrant !

Je précise que je n'ai pas du tout ce symptôme avec un Apache 2.4.17 indépendant (et sous Windows aussi). Avec un CPU de 6 coeurs, virtualisé également avec VMWare, je monte à 32 traitements simultanés !! (je n'ai pas tenté d'aller au dessus).
Ce n'est donc pas directement Apache qui est coupable, ou alors la version 2.4.37 est buggée .. ou bien php .. ça m'embête bien .

Bonne journée!



Modifie 1 fois. Derniere modification le 19/03/2020 à 09:16 par JerryCbn.

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: JerryCbn (---.subs.proxad.net)
Date: 19 March 2020 à 09:20

Otomatic, j'ai trouvé !


Je suis passé sur un PHP 5.6.40 et le problème disparaît !
PHP 7.0.33 : problème présent.
PHP 7.1.26 : problème présent.
PHP 7.2.14 : problème présent.
PHP 7.3.1 : problème présent.
PHP 7.3.4 : problème présent.


Mais .. pourquoi ?

Edit: le Apache indépendant sous Windows que j'ai monté à 32 threads tourne sous php 5.



Modifie 1 fois. Derniere modification le 19/03/2020 à 09:22 par JerryCbn.

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: Otomatic (Modérateur)
Date: 19 March 2020 à 10:53

Bonjour,

Rien trouvé entre les directives des php.ini-developpement ou -production des versions 5.6.40 et 7.0.33

Rien trouvé dans Migration de PHP 5.6.x vers PHP 7.0.x chez php.net

Je continue les investigations.

De votre côté, si vous trouvez quelque chose, le retour serait très apprécié.

---------------------------------------------------------------
Documentation Apache - Documentation PHP - Documentation MySQL - Wampserver install files & addons

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: JerryCbn (---.subs.proxad.net)
Date: 19 March 2020 à 11:04

Je vais chercher aussi.

Vous avez pu reproduire le problème ?


Edit : j'ai essayé de refaire le test en requêtant des fichiers différents à chaque fois, le problème demeure.

Et fait important, ce problème n'existe pas sur une installation apache/php autonome (Apache 2.4.39 / PHP 7.1.33). Je n'ai pas essayé avec les solutions concurrentes (style XAMPP, EasyPHP ...).



Modifie 1 fois. Derniere modification le 19/03/2020 à 11:19 par JerryCbn.

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: Otomatic (Modérateur)
Date: 19 March 2020 à 11:45

Bonjour,

Ce n'est pas un problème de solutions “concurrentes”, mais uniquement des directives dans httpd.conf.

Il faudrait comparer les différences des directives dans les httpd.conf de votre Apache autonome qui “fonctionne” avec celles d'Apache de wampserver.

Par exemple, avec Apache Wampserver, il n'y a pas de directives MaxRequestWorkers ni les directives associées comme ServerLimit ou ThreadPerChild et il se pourrait que les valeurs par défaut ne soient pas les mêmes en fonction de la version PHP utilisée.

Ne pas oublier que PHP est “utilisé” en tant que module Apache :
LoadModule php7_module "${INSTALL_DIR}/bin/php/php7.2.29/php7apache2_4.dll"
ou
LoadModule php5_module "${INSTALL_DIR}/bin/php/php5.6.40/php5apache2_4.dll"

---------------------------------------------------------------
Documentation Apache - Documentation PHP - Documentation MySQL - Wampserver install files & addons

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: Otomatic (Modérateur)
Date: 19 March 2020 à 12:56

Re-bonjour,

Il faut aussi comparer les versions Apache, elles ne sont pas forcément compilées avec les mêmes options.
Toutes les versions Apache de Wampserver proviennent de Apachelounge.com et votre version d'Apache autonome est peut-être compilée différemment.
Dans le dossier bin d'Apache on peut obtenir de nombreuses informations sur la version utilisée.

Par exemple la configuration de compilation par la commande httpd -V
Server version: Apache/2.4.41 (Win64)
Apache Lounge VS16 Server built:   Aug  9 2019 16:46:32
Server's Module Magic Number: 20120211:88
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
    forked:     no
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/apache"
 -D SUEXEC_BIN="/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error.log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
où on peut voir que le serveur est "threaded" avec fixed thread count
Pour info, en tapant la commande
httpd -V | clip
le résultat se retrouve dans le presse-papiers ; très pratique pour les copier/coller.
Modules compilés de base :
Compiled in modules:
  core.c
  mod_win32.c
  mpm_winnt.c
  http_core.c
  mod_so.c
et puis, la liste de toutes les directives de configuration disponibles pour la version en cours : httpd -L et la liste de tous les modules chargés : httpd -t -D DUMP_MODULES
Je ne mets pas les résultats, mais il faut au moins tout cela pour comparer les versions.

---------------------------------------------------------------
Documentation Apache - Documentation PHP - Documentation MySQL - Wampserver install files & addons

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: JerryCbn (---.subs.proxad.net)
Date: 19 March 2020 à 14:42

Otomatic, j'ai trouvé !



Si j'utilise une méthode plus classique pour l'attente, par exemple sleep(5) plutôt qu'une boucle while (microtome(true) - $i < 5) { } , alors ça fonctionne parfaitement avec PHP 7.x


Ça ne vient donc pas de Apache.



La fonction microtime() est toutefois assez spéciale, je comprends qu'elle ne puisse s'exécuter que sur un seul thread à la fois, peut être pour mesurer le temps avec une très grande précision. N'empêche que cette "limitation" n'existe pas sur PHP 5.x, et n'existe pas non plus sur un PHP 7 indépendant de WAMP.

C'est ce que j'en conclus.



Modifie 1 fois. Derniere modification le 19/03/2020 à 14:43 par JerryCbn.

Options: Répondre•Citer ce Message
Re: Augmenter le nombre de connexions simultanées
Envoyé par: Otomatic (Modérateur)
Date: 19 March 2020 à 15:10

Bonjour,

Merci du retour.

> n'existe pas non plus sur un PHP 7 indépendant de WAMP.
Tout comme les versions Apache de Wampserver proviennent de chez Apachelounge, toutes les versions PHP proviennent de chez php.net et avec un php.ini (presque) identique au php.ini-develoment originel.

Il est assez simple de vérifier si Wampserver peut être la cause d'un quelconque problème :
- Quitter Wampserver
- Ouvrir une fenêtre de commande en tant qu'administrateur pour y démarrer les services sans Wampserver :

net start wampapache (ou wampapache64)
net start wampmysqld (ou wampmydsql64)
net start wampmariadb (ou wampmariadb64)

Lancer le navigateur et lancer les sites locaux ou même simplement 'http://localhost/'

---------------------------------------------------------------
Documentation Apache - Documentation PHP - Documentation MySQL - Wampserver install files & addons

Options: Répondre•Citer ce Message


Aller à : Liste des Forums•Liste des messages•Recherche•Connexion
Désolé, seuls les utilisateurs connectés peuvent envoyer des messages dans ce forum.
Cliquer ici pour se connecter

design by jidePowered by Alter Way get firefoxget PHP