Создадим дефолтное приложение которое выводит случайное число от 10 до 99 (чтобы создать динамику и исключить влияние кэша)
https://github.com/phan7om/s3bench
https://github.com/phan7om/yii2bench
Тестировать будем с помощью ab
Дефолтная конфигурация - php.ini (prod), nginx (c дефолтными настройками), php-fpm (дефолт). Композер установленный через install без оптимизаций.
ab -n1000 http://192.168.1.101/
Concurrency Level: 1
Time taken for tests: 7.607 seconds
Complete requests: 1000
Failed requests: 907
(Connect: 0, Receive: 0, Length: 907, Exceptions: 0)
Total transferred: 387916 bytes
HTML transferred: 170916 bytes
Requests per second: 131.46 [#/sec] (mean)
Time per request: 7.607 [ms] (mean)
Time per request: 7.607 [ms] (mean, across all concurrent requests)
Transfer rate: 49.80 [Kbytes/sec] received
Всё хорошо. Сразу в 50 потоков попробуем и подольше
ab -c50 -n10000 http://192.168.1.101/
Concurrency Level: 50
Time taken for tests: 25.756 seconds
Complete requests: 10000
Failed requests: 965
(Connect: 0, Receive: 0, Length: 965, Exceptions: 0)
Total transferred: 3879215 bytes
HTML transferred: 1709215 bytes
Requests per second: 388.26 [#/sec] (mean)
Time per request: 128.779 [ms] (mean)
Time per request: 2.576 [ms] (mean, across all concurrent requests)
Transfer rate: 147.09 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 7
Processing: 10 128 6.4 128 160
Waiting: 10 128 6.4 128 160
Total: 10 128 6.4 128 163
Percentage of the requests served within a certain time (ms)
50% 128
66% 130
75% 131
80% 132
90% 134
95% 137
98% 140
99% 142
100% 163 (longest request)
nginx содержит настройку worker_processes auto; поэтому число воркеров было дефолтным - 4 (по процессу на ядро)
Оптимизируем композер, чтобы проверить влияние.
SYMFONY_ENV=prod composer install --no-dev --optimize-autloader
Concurrency Level: 50
Time taken for tests: 25.224 seconds
Complete requests: 10000
Failed requests: 989
(Connect: 0, Receive: 0, Length: 989, Exceptions: 0)
Total transferred: 3879149 bytes
HTML transferred: 1709149 bytes
Requests per second: 396.45 [#/sec] (mean)
Time per request: 126.118 [ms] (mean)
Time per request: 2.522 [ms] (mean, across all concurrent requests)
Transfer rate: 150.19 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 7
Processing: 9 126 6.4 126 158
Waiting: 9 126 6.4 125 158
Total: 10 126 6.4 126 158
Percentage of the requests served within a certain time (ms)
50% 126
66% 127
75% 128
80% 129
90% 131
95% 134
98% 138
99% 140
100% 158 (longest request)
Оптимизация композера не сильно помогла. Может правда стали меньше памяти потреблять.
AppCache
Concurrency Level: 50
Time taken for tests: 27.139 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 3880000 bytes
HTML transferred: 1710000 bytes
Requests per second: 368.48 [#/sec] (mean)
Time per request: 135.694 [ms] (mean)
Time per request: 2.714 [ms] (mean, across all concurrent requests)
Transfer rate: 139.62 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 10
Processing: 10 135 7.3 135 169
Waiting: 10 135 7.3 135 169
Total: 10 135 7.3 135 170
Percentage of the requests served within a certain time (ms)
50% 135
66% 136
75% 138
80% 138
90% 142
95% 145
98% 150
99% 158
100% 170 (longest request)
Стало только хуже. Вывод - без этой обёртки работает быстрее! По крайней мере на простых запросах.
Заюзаем роутинг симфони и будем учитывать эти параметры при расчете
Также выведем потребляемую память. Получим такие цифры
Document Path: /random/10/99
Document Length: 197 bytes
Concurrency Level: 50
Time taken for tests: 25.613 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 4140000 bytes
HTML transferred: 1970000 bytes
Requests per second: 390.42 [#/sec] (mean)
Time per request: 128.066 [ms] (mean)
Time per request: 2.561 [ms] (mean, across all concurrent requests)
Transfer rate: 157.85 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 7
Processing: 9 127 7.8 127 158
Waiting: 9 127 7.8 127 158
Total: 10 128 7.8 127 158
Percentage of the requests served within a certain time (ms)
50% 127
66% 129
75% 130
80% 131
90% 135
95% 139
98% 150
99% 156
100% 158 (longest request)
Используемая память - Memory usage: 2628064
Выкидываем твиг и доктрину. Memory usage: 2486184
Идёт ускорение
Concurrency Level: 50
Time taken for tests: 21.727 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 4140000 bytes
HTML transferred: 1970000 bytes
Requests per second: 460.25 [#/sec] (mean)
Time per request: 108.636 [ms] (mean)
Time per request: 2.173 [ms] (mean, across all concurrent requests)
Transfer rate: 186.08 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 7 108 6.7 108 136
Waiting: 7 108 6.7 108 136
Total: 8 108 6.7 108 136
Percentage of the requests served within a certain time (ms)
50% 108
66% 110
75% 111
80% 111
90% 114
95% 118
98% 131
99% 132
100% 136 (longest request)
Итак. Встречайте yii2
Concurrency Level: 50
Time taken for tests: 7.708 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 3440000 bytes
HTML transferred: 1990000 bytes
Requests per second: 1297.32 [#/sec] (mean)
Time per request: 38.541 [ms] (mean)
Time per request: 0.771 [ms] (mean, across all concurrent requests)
Transfer rate: 435.82 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 5 38 2.2 38 48
Waiting: 5 38 2.2 38 48
Total: 5 38 2.2 38 48
Percentage of the requests served within a certain time (ms)
50% 38
66% 39
75% 39
80% 39
90% 41
95% 43
98% 44
99% 45
100% 48 (longest request)
Усилим оптимизацию. Внесём правки в php.ini
realpath_cache_size = 4096k
А также следующие команды
SYMFONY_ENV=prod composer install --no-dev --optimize-autoloader
SYMFONY_ENV=prod composer dump-autoload --optimize
php bin/console cache:clear -e=prod --no-debug
https://github.com/phan7om/s3bench
https://github.com/phan7om/yii2bench
Тестировать будем с помощью ab
Дефолтная конфигурация - php.ini (prod), nginx (c дефолтными настройками), php-fpm (дефолт). Композер установленный через install без оптимизаций.
ab -n1000 http://192.168.1.101/
Concurrency Level: 1
Time taken for tests: 7.607 seconds
Complete requests: 1000
Failed requests: 907
(Connect: 0, Receive: 0, Length: 907, Exceptions: 0)
Total transferred: 387916 bytes
HTML transferred: 170916 bytes
Requests per second: 131.46 [#/sec] (mean)
Time per request: 7.607 [ms] (mean)
Time per request: 7.607 [ms] (mean, across all concurrent requests)
Transfer rate: 49.80 [Kbytes/sec] received
Всё хорошо. Сразу в 50 потоков попробуем и подольше
ab -c50 -n10000 http://192.168.1.101/
Concurrency Level: 50
Time taken for tests: 25.756 seconds
Complete requests: 10000
Failed requests: 965
(Connect: 0, Receive: 0, Length: 965, Exceptions: 0)
Total transferred: 3879215 bytes
HTML transferred: 1709215 bytes
Requests per second: 388.26 [#/sec] (mean)
Time per request: 128.779 [ms] (mean)
Time per request: 2.576 [ms] (mean, across all concurrent requests)
Transfer rate: 147.09 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 7
Processing: 10 128 6.4 128 160
Waiting: 10 128 6.4 128 160
Total: 10 128 6.4 128 163
Percentage of the requests served within a certain time (ms)
50% 128
66% 130
75% 131
80% 132
90% 134
95% 137
98% 140
99% 142
100% 163 (longest request)
nginx содержит настройку worker_processes auto; поэтому число воркеров было дефолтным - 4 (по процессу на ядро)
Оптимизируем композер, чтобы проверить влияние.
SYMFONY_ENV=prod composer install --no-dev --optimize-autloader
Concurrency Level: 50
Time taken for tests: 25.224 seconds
Complete requests: 10000
Failed requests: 989
(Connect: 0, Receive: 0, Length: 989, Exceptions: 0)
Total transferred: 3879149 bytes
HTML transferred: 1709149 bytes
Requests per second: 396.45 [#/sec] (mean)
Time per request: 126.118 [ms] (mean)
Time per request: 2.522 [ms] (mean, across all concurrent requests)
Transfer rate: 150.19 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 7
Processing: 9 126 6.4 126 158
Waiting: 9 126 6.4 125 158
Total: 10 126 6.4 126 158
Percentage of the requests served within a certain time (ms)
50% 126
66% 127
75% 128
80% 129
90% 131
95% 134
98% 138
99% 140
100% 158 (longest request)
Оптимизация композера не сильно помогла. Может правда стали меньше памяти потреблять.
AppCache
Concurrency Level: 50
Time taken for tests: 27.139 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 3880000 bytes
HTML transferred: 1710000 bytes
Requests per second: 368.48 [#/sec] (mean)
Time per request: 135.694 [ms] (mean)
Time per request: 2.714 [ms] (mean, across all concurrent requests)
Transfer rate: 139.62 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 10
Processing: 10 135 7.3 135 169
Waiting: 10 135 7.3 135 169
Total: 10 135 7.3 135 170
Percentage of the requests served within a certain time (ms)
50% 135
66% 136
75% 138
80% 138
90% 142
95% 145
98% 150
99% 158
100% 170 (longest request)
Стало только хуже. Вывод - без этой обёртки работает быстрее! По крайней мере на простых запросах.
Заюзаем роутинг симфони и будем учитывать эти параметры при расчете
Также выведем потребляемую память. Получим такие цифры
Document Path: /random/10/99
Document Length: 197 bytes
Concurrency Level: 50
Time taken for tests: 25.613 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 4140000 bytes
HTML transferred: 1970000 bytes
Requests per second: 390.42 [#/sec] (mean)
Time per request: 128.066 [ms] (mean)
Time per request: 2.561 [ms] (mean, across all concurrent requests)
Transfer rate: 157.85 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 7
Processing: 9 127 7.8 127 158
Waiting: 9 127 7.8 127 158
Total: 10 128 7.8 127 158
Percentage of the requests served within a certain time (ms)
50% 127
66% 129
75% 130
80% 131
90% 135
95% 139
98% 150
99% 156
100% 158 (longest request)
Используемая память - Memory usage: 2628064
Выкидываем твиг и доктрину. Memory usage: 2486184
Идёт ускорение
Concurrency Level: 50
Time taken for tests: 21.727 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 4140000 bytes
HTML transferred: 1970000 bytes
Requests per second: 460.25 [#/sec] (mean)
Time per request: 108.636 [ms] (mean)
Time per request: 2.173 [ms] (mean, across all concurrent requests)
Transfer rate: 186.08 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 7 108 6.7 108 136
Waiting: 7 108 6.7 108 136
Total: 8 108 6.7 108 136
Percentage of the requests served within a certain time (ms)
50% 108
66% 110
75% 111
80% 111
90% 114
95% 118
98% 131
99% 132
100% 136 (longest request)
Итак. Встречайте yii2
Concurrency Level: 50
Time taken for tests: 7.708 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 3440000 bytes
HTML transferred: 1990000 bytes
Requests per second: 1297.32 [#/sec] (mean)
Time per request: 38.541 [ms] (mean)
Time per request: 0.771 [ms] (mean, across all concurrent requests)
Transfer rate: 435.82 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 5 38 2.2 38 48
Waiting: 5 38 2.2 38 48
Total: 5 38 2.2 38 48
Percentage of the requests served within a certain time (ms)
50% 38
66% 39
75% 39
80% 39
90% 41
95% 43
98% 44
99% 45
100% 48 (longest request)
Усилим оптимизацию. Внесём правки в php.ini
realpath_cache_size = 4096k
А также следующие команды
SYMFONY_ENV=prod composer install --no-dev --optimize-autoloader
SYMFONY_ENV=prod composer dump-autoload --optimize
php bin/console cache:clear -e=prod --no-debug
И в итоге получим
Concurrency Level: 50
Time taken for tests: 23.838 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 4140000 bytes
HTML transferred: 1970000 bytes
Requests per second: 419.49 [#/sec] (mean)
Time per request: 119.191 [ms] (mean)
Time per request: 2.384 [ms] (mean, across all concurrent requests)
Transfer rate: 169.60 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 9 119 7.1 118 150
Waiting: 9 119 7.1 118 150
Total: 10 119 7.0 118 150
Percentage of the requests served within a certain time (ms)
50% 118
66% 120
75% 121
80% 122
90% 124
95% 128
98% 139
99% 146
100% 150 (longest request)
Уже быстрее. Но всё же не настолько. Если смотреть на профилировщик, то окажется что основное, чем занят symfony2 - это подгрузка файлов (классов) - их намного больше чем в yii2.
Как бы 1000 запросов в 50 потоков обрабатываются 23 секунды или 8 - есть разница.
Concurrency Level: 50
Time taken for tests: 23.838 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 4140000 bytes
HTML transferred: 1970000 bytes
Requests per second: 419.49 [#/sec] (mean)
Time per request: 119.191 [ms] (mean)
Time per request: 2.384 [ms] (mean, across all concurrent requests)
Transfer rate: 169.60 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 9 119 7.1 118 150
Waiting: 9 119 7.1 118 150
Total: 10 119 7.0 118 150
Percentage of the requests served within a certain time (ms)
50% 118
66% 120
75% 121
80% 122
90% 124
95% 128
98% 139
99% 146
100% 150 (longest request)
Уже быстрее. Но всё же не настолько. Если смотреть на профилировщик, то окажется что основное, чем занят symfony2 - это подгрузка файлов (классов) - их намного больше чем в yii2.
Как бы 1000 запросов в 50 потоков обрабатываются 23 секунды или 8 - есть разница.
Комментариев нет:
Отправить комментарий