Pourquoi ai-je si peu de capacités de parallélisme pour mon application Web dans l'instance LAMP EC2?

J'ai grandi dans un développeur Web et j'ai travaillé longtemps pour créer votre application PHP à l'aide d'une infrastructure CakePHP. Le problème est né lorsque j'ai commencé à tester ab (Apache Bench) Sur l'instance Amazon EC2, dans lequel l'application est située. J'ai une terrible période de chargement de page moyen, bien que j'utilise une instance c1.medium (2 noyau 2 Gb de bélier), Et je pense que tout va bien.

Je voudrais courir:

ab -n 200 -c 20 [url=http://localhost/heavy-but-view-cached-page.php]http://localhost/heavy-but-view-cached-page.php[/url]

Voici les résultats:

Concurrency Level:      20 
Time taken for tests: 48.197 seconds
Complete requests: 200
Failed requests: 0
Write errors: 0
Total transferred: 392111200 bytes
HTML transferred: 392047600 bytes
Requests per second: 4.15 [#/sec] (mean)
Time per request: 4819.723 [ms] (mean)
Time per request: 240.986 [ms] (mean, across all concurrent requests)
Transfer rate: 7944.88 [Kbytes/sec] received

Tandis que le test est effectué ab, Je lance VMStat, qui montre que Swap reste sur 0, La CPU est constamment sur 80-100% (Bien que je ne suis pas sûr de pouvoir lui faire confiance sur une machine virtuelle), utilisant RAM Augmente approximativement avant 1,6 G (En quittant 400M est libre). Chargement augmente à environ jusqu'à 8, Et le site ralentit pour ramper.

C'est ce que je pense, je le fais dès le code:

Dans le navigateur Chrome Les pages non équipées sont généralement téléchargées pour 800–1000 MS et les pages cachées sont chargées pour 300–500 m / s. Pas incroyable, mais pas effrayant.

Grâce à la mise en cache des vues sur chaque page de chargement, il peut ne pas y avoir plus d'une demande BD d'écrire des données de session. Ainsi, nous pouvons exclure un goulot d'étranglement dans la base de données.

j'ai APC.

j'utilise Memcached Maintenir le cache des représentations et d'autres caisses de sites.

Code de profileur xhprof montre que les pages en cache occupent de 10 avant que 40 MB de mémoire et de 100 avant que 1000 ms à temps.

Pages qui seraient les violateurs les plus graves de xhprof Cela ressemblerait à ceci:

Total Incl. Wall Time (microsec):   330,143 microsecs
Total Incl. CPU (microsecs): 320,019 microsecs
Total Incl. MemUse (bytes): 36,786,192 bytes
Total Incl. PeakMemUse (bytes): 46,667,008 bytes
Number of Function Calls: 5,195

Ma configuration Apache:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

<ifmodule mpm_prefork_module="">
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 120
MaxRequestsPerChild 1000
</ifmodule>

Quelque chose ne va pas avec le serveur? Quelque chose ne va pas avec EC2? Ou est-ce mon code? Une installation évidente à laquelle je dois faire attention trop de demandes DNS? Qu'est-ce qui me manque? Je veux vraiment atteindre 1000 Opérations simultanées, mais à une telle vitesse, cela ne se produira pas.
Invité:

Dominique

Confirmation de:

Vous passez beaucoup de données. 8 Mb / C, vous épuisez votre connexion réseau.

Pour répondre aux questions, connectez-vous ou registre