При тестировании сервера простого узла (написанного с помощью Hapi.js):
'use strict';
var Hapi = require("hapi");
var count = 0;
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
server.route({
method: 'GET',
path: '/test',
handler: (request, h) => {
count ++;
console.log(count);
return count;
}
});
const init = async () => {
await server.start();
};
process.on('unhandledRejection', (err) => {
process.exit(1);
});
init();
запустить сервер:
node ./server.js
запустить инструмент Apache ab:
/usr/bin/ab -n 200 -c 30 localhost:3000/test
Подробности Env:
OS: CentOS release 6.9
Node: v10.14.1
Hapi.js: 17.8.1
Я обнаружил неожиданные результаты в случае нескольких одновременных запросов (-c 30): функция обработчика запросов была вызвана больше раз, чем количество запросов, которые должны быть выполнены (-n 200).
Пример вывода Ab:
Benchmarking localhost (be patient)
Server Software:
Server Hostname: localhost
Server Port: 3000
Document Path: /test
Document Length: 29 bytes
Concurrency Level: 30
Time taken for tests: 0.137 seconds
Complete requests: 200
Failed requests: 0
Write errors: 0
Total transferred: 36081 bytes
HTML transferred: 6119 bytes
Requests per second: 1459.44 [#/sec] (mean)
Time per request: 20.556 [ms] (mean)
Time per request: 0.685 [ms] (mean, across all concurrent requests)
Transfer rate: 257.12 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 0
Processing: 15 17 1.5 16 20
Waiting: 2 9 3.9 9 18
Total: 15 17 1.5 16 21
Percentage of the requests served within a certain time (ms)
50% 16
66% 16
75% 17
80% 18
90% 20
95% 20
98% 21
99% 21
100% 21 (longest request)
И сервер узла печатает 211 строк журнала.Во время различных тестов несоответствие является переменным, но всегда присутствует:
-n 1000 -c 1 -> 1000 log
-n 1000 -c 2 -> ~1000 logs
-n 1000 -c 10 -> ~1001 logs
-n 1000 -c 70 -> ~1008 logs
-n 1000 -c 1000 -> ~1020 logs
Похоже, что при увеличении параллелизма несоответствие увеличивается.
Я не мог выяснить, выполняет ли инструмент ab больше httpзапросы или сервер узлов отвечает больше раз, чем необходимо.
Не могли бы вы помочь?