Я просто играю с фреймворком Snap и хотел посмотреть, как он работает по сравнению с другими фреймворками (при полностью искусственных обстоятельствах).
Что я обнаружил, так это то, что мое приложение Snap достигает максимума примерно в 1500 запросов в секунду (приложение просто snap init; snap build; ./dist/app/app
, т.е. код не изменяется в приложении по умолчанию, созданном Snap):
$ ab -n 20000 -c 500 http://127.0.0.1:8000/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests
Server Software: Snap/0.9.5.1
Server Hostname: 127.0.0.1
Server Port: 8000
Document Path: /
Document Length: 721 bytes
Concurrency Level: 500
Time taken for tests: 12.845 seconds
Complete requests: 20000
Failed requests: 0
Total transferred: 17140000 bytes
HTML transferred: 14420000 bytes
Requests per second: 1557.00 [#/sec] (mean)
Time per request: 321.131 [ms] (mean)
Time per request: 0.642 [ms] (mean, across all concurrent requests)
Transfer rate: 1303.07 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 44 287.6 0 3010
Processing: 6 274 153.6 317 1802
Waiting: 5 274 153.6 317 1802
Total: 20 318 346.2 317 3511
Percentage of the requests served within a certain time (ms)
50% 317
66% 325
75% 334
80% 341
90% 352
95% 372
98% 1252
99% 2770
100% 3511 (longest request)
Затем я запустил приложение Grails, и кажется, что Tomcat (после прогрева JVM) может взять на себя немного больше нагрузки:
$ ab -n 20000 -c 500 http://127.0.0.1:8080/test-0.1/book
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests
Server Software: Apache-Coyote/1.1
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /test-0.1/book
Document Length: 722 bytes
Concurrency Level: 500
Time taken for tests: 4.366 seconds
Complete requests: 20000
Failed requests: 0
Total transferred: 18700000 bytes
HTML transferred: 14440000 bytes
Requests per second: 4581.15 [#/sec] (mean)
Time per request: 109.143 [ms] (mean)
Time per request: 0.218 [ms] (mean, across all concurrent requests)
Transfer rate: 4182.99 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 67 347.4 0 3010
Processing: 1 30 31.4 21 374
Waiting: 0 26 24.4 20 346
Total: 1 97 352.5 21 3325
Percentage of the requests served within a certain time (ms)
50% 21
66% 28
75% 35
80% 42
90% 84
95% 230
98% 1043
99% 1258
100% 3325 (longest request)
Я предполагаю, что отчасти это может быть связано с тем, что Tomcat резервирует много оперативной памяти и может хранить/кэшировать некоторые методы. Во время этого эксперимента Tomcat использовал более 700 МБ или ОЗУ, в то время как Snap едва приблизился к 70 МБ.
У меня есть вопросы:
- Я сравниваю яблоки и апельсины здесь?
- Какие шаги нужно предпринять, чтобы оптимизировать Snap для пропускной способности/скорости?
Дальнейшие эксперименты:
Затем, как предложил mightybyte, я начал экспериментировать с +RTS -A4M -N4
вариантами. Приложение смогло обслужить чуть более 2000 запросов в секунду (увеличение примерно на 25%).
Я также удалил вложенные шаблоны и предоставил документ (того же размера, что и раньше) из файла tpl
верхнего уровня. Это увеличило производительность до чуть более 7000 запросов в секунду. Использование памяти увеличилось примерно до 700 МБ.