Мне сказали, что tomcat работает медленно при обслуживании статического ресурса, такого как js / css / img. (Я только знаком с nodejs)
Я не понимаю, почему tomcat медленнее, чем nodejs / nginx. Должны ли все они использовать кэш-память или, по крайней мере, использовать неблокирующие операции ввода-вывода при обслуживании статических ресурсов?
Я провел тест AB, и результат неожиданный (tomcat быстрее, чем nodejs). Я использовал Windows 7 Pro с Intel Core i5-5200 @ 2,20 ГГц и 8 ГБ ОЗУ (ноутбук Dell). Моя версия nodejs v8.9.0 и java версия 1.8.045 и tomcat 5.5.17.
Код узла:
const path = require('path');
const Koa = require('koa');
const Router = require('koa-router');
const staticServer = require('koa-static');
const app = new Koa();
const router = new Router();
app.use(staticServer( path.join(__dirname, 'static')) );
app.listen(8001);
Результат nodejs:
E:\soft-new\apache\Apache24\bin>ab -c 20 -n 1000 http://localhost:8001/benu_crm/a.html
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: localhost
Server Port: 8001
Document Path: /benu_crm/a.html
Document Length: 3 bytes
Concurrency Level: 20
Time taken for tests: 0.679 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 209000 bytes
HTML transferred: 3000 bytes
Requests per second: 1472.67 [#/sec] (mean)
Time per request: 13.581 [ms] (mean)
Time per request: 0.679 [ms] (mean, across all concurrent requests)
Transfer rate: 300.57 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 1
Processing: 6 13 3.0 13 26
Waiting: 6 11 2.7 10 23
Total: 6 13 3.0 13 26
Percentage of the requests served within a certain time (ms)
50% 13
66% 14
75% 15
80% 15
90% 18
95% 20
98% 21
99% 23
100% 26 (longest request)
и результат tomcat: (для tomcat я просто создал a.html без какого-либо java-кода)
E:\soft-new\apache\Apache24\bin>ab -c 20 -n 1000 http://localhost:8050/benu_crm/a.html
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache-Coyote/1.1
Server Hostname: localhost
Server Port: 8050
Document Path: /benu_crm/a.html
Document Length: 3 bytes
Concurrency Level: 20
Time taken for tests: 0.171 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 222000 bytes
HTML transferred: 3000 bytes
Requests per second: 5847.61 [#/sec] (mean)
Time per request: 3.420 [ms] (mean)
Time per request: 0.171 [ms] (mean, across all concurrent requests)
Transfer rate: 1267.74 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 2
Processing: 0 3 1.3 3 8
Waiting: 0 3 1.4 3 8
Total: 0 3 1.3 3 8
Percentage of the requests served within a certain time (ms)
50% 3
66% 4
75% 4
80% 4
90% 5
95% 6
98% 6
99% 7
100% 8 (longest request)
@ EugèneAdell спасибо. Я увеличил размер a.html
до 309 344 байта. Тогда tomcat 5.5.17 и nodejs koa2 были почти равны. Я попробую NIO tomcat позже и выложу результат тоже. Но меня все равно удивило, что BIO tomcat почти равен koa2.
результат nodejs:
E:\soft-new\apache\Apache24\bin>ab -c 20 -n 1000 http://localhost:8001/benu_crm/a.html
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: localhost
Server Port: 8001
Document Path: /benu_crm/a.html
Document Length: 309344 bytes
Concurrency Level: 20
Time taken for tests: 1.071 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 309555000 bytes
HTML transferred: 309344000 bytes
Requests per second: 933.65 [#/sec] (mean)
Time per request: 21.421 [ms] (mean)
Time per request: 1.071 [ms] (mean, across all concurrent requests)
Transfer rate: 282243.05 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 3
Processing: 8 21 12.0 20 386
Waiting: 2 10 2.2 9 23
Total: 8 21 12.0 20 386
Percentage of the requests served within a certain time (ms)
50% 20
66% 22
75% 23
80% 23
90% 25
95% 26
98% 29
99% 31
100% 386 (longest request)
Результат кота:
E:\soft-new\apache\Apache24\bin>ab -c 20 -n 1000 http://localhost:8050/benu_crm/a.html
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache-Coyote/1.1
Server Hostname: localhost
Server Port: 8050
Document Path: /benu_crm/a.html
Document Length: 309344 bytes
Concurrency Level: 20
Time taken for tests: 0.916 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 309573000 bytes
HTML transferred: 309344000 bytes
Requests per second: 1091.64 [#/sec] (mean)
Time per request: 18.321 [ms] (mean)
Time per request: 0.916 [ms] (mean, across all concurrent requests)
Transfer rate: 330021.72 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 1
Processing: 4 18 3.6 17 45
Waiting: 0 2 2.8 1 22
Total: 4 18 3.6 18 45
Percentage of the requests served within a certain time (ms)
50% 18
66% 18
75% 19
80% 19
90% 21
95% 23
98% 27
99% 37
100% 45 (longest request)