2016-08-17 3 views
0

J'expérimente node.js et je suis confronté à un problème étrange de débit. Au fond, j'ai ce code pour créer un simple serveur HTTP (sur une machine virtuelle avec 4 Go de RAM et 4 vCPU, sous Ubuntu 16.04 et Node.js v6.3.1):Augmenter le débit du serveur http node.js

const http = require('http'); 
http.createServer((req, res) => { 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.end('Hello'); 
}).listen(8888); 

Je suis en avec node server.js à démarrer le serveur HTTP, puis je suis en train de charger le test à partir d'une autre machine en utilisant Apache Bench:

ab -l -r -n 100 -c 50 -k http://server-ip:8888/

Cependant, quel que soit le simultanéité nombre & de demandes (n/valeurs c) J'ai testé avec, les résultats de référence montrent toujours les «demandes par seconde» à moins de 5/sec, ce qui est trop lo w pour un framework évolutif comme node.js et un simple serveur HTTP comme ci-dessus.

Donc, je suppose que c'est quelque chose à voir avec la configuration, les paramètres, etc. Quelqu'un a des idées sur la façon d'augmenter le débit dans ce cas ?!

Mise à jour: Je suis venu des gens qui obtiennent à haut débit avec le code de base quasi-identique en cours d'exécution sur les machines virtuelles nuage:

http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php

https://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/

http://blog.yld.io/2016/02/08/squeeze-the-juice-out-of-node/

http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/

+1

Utilisez un cluster pour utiliser plusieurs cœurs. – Amit

+0

Pas de chance. Résultats identiques avec 'cluster' (de 4 travailleurs). – Nick

+0

Essayez ensuite un serveur dédié. – Amit

Répondre

1

Le problème était que Windows 8.1 (première tentative de la machine de test de charge) limitait les connexions tcp, affectant ainsi la concurrence d'Apache Bench (ab). Sur une machine Ubuntu différente, cela fonctionne bien et les résultats de débit sont bien meilleurs.

0

Toujours essayer de confirmer que l'erreur n'est pas causée par des variables externes, toujours aller du plus proche au plus proche. Et veillez à ce que vous ne puissiez pas exécuter un benchmark sur la même machine que le serveur testé, car les ressources de votre outil de benchmark seront additionnées au serveur testé si elles ne sont pas dans le logiciel, du moins dans le matériel. Même avec la virtualisation.

Bonne chance avec NodeJS!