Je suis curieux de savoir pourquoi lors de l'évaluation du serveur web Python CherryPy en utilisant ab
, avec -c 7
(7 threads simultanés), il peut serveur 1500 demandes/s (à propos de ce que je m'attends) , mais quand je change à -c 8
il tombe jusqu'à 25 demandes/s. Je cours CherryPy avec numthreads = 10 (mais il ne fait pas une différence si j'utilise numthreads = 8 ou 20) sur une machine Windows 64 bits avec quatre cœurs exécutant Python 2.6. Je suspecte à moitié que le Python GIL fasse partie du problème, mais je ne sais pas pourquoi cela se produit uniquement lorsque je reçois jusqu'à 8 threads demandant simultanément. Sur une machine à quatre cœurs, je m'attendrais à ce qu'elle change à -c 4
, mais ce n'est pas le cas.CherryPy 60x comme lent dans le banc d'essai avec 8 demandes par rapport à 7
J'utilise le serveur Web CherryPy un fichier qui est livré avec web.py, et voici l'application WSGI que je teste contre:
from web.wsgiserver import CherryPyWSGIServer
def application(environ, start_response):
start_response("200 OK", [("Content-type", "text/plain")])
return ["Hello World!",]
server = CherryPyWSGIServer(('0.0.0.0', 80), application, numthreads=10)
try:
server.start()
except KeyboardInterrupt:
server.stop()
La sortie ab
7 et 8 threads simultanés est:
C:\\> ab -n 1000 -c 7 http://localhost/
...
Concurrency Level: 7
Time taken for tests: 0.670 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 130000 bytes
HTML transferred: 12000 bytes
Requests per second: 1492.39 [#/sec] (mean)
Time per request: 4.690 [ms] (mean)
Time per request: 0.670 [ms] (mean, across all concurrent requests)
Transfer rate: 189.46 [Kbytes/sec] received
C:\\> ab -n 1000 -c 8 http://localhost/
...
Concurrency Level: 8
Time taken for tests: 7.169 seconds
Complete requests: 158
Failed requests: 0
Write errors: 0
Total transferred: 20540 bytes
HTML transferred: 1896 bytes
Requests per second: 22.04 [#/sec] (mean)
Time per request: 362.973 [ms] (mean)
Time per request: 45.372 [ms] (mean, across all concurrent requests)
Transfer rate: 2.80 [Kbytes/sec] received
Testé sur une machine Linux, il semble y avoir une dégradation plus faible, aléatoire, des performances de -c7 à -c8. Environ (1800 par seconde à 600 ~ 1200 par seconde). Le problème semble se produire dans les dernières demandes, et disparaît lorsque -n est mis à jour à 10 000. Avez-vous essayé cela? –
Merci, Romauld. Oui, je reçois exactement la même moyenne avec '-n 10000', et il ne semble pas y avoir de différence dans les dernières demandes pour moi. Combien de cœurs a votre machine? –
Il a 2 noyaux. –