Я вижу резкую разницу в матрице производительности, когда запускаю ее с тестом apache (ab) на моем локальном компьютере VS production, размещенном в средний экземпляр amazon. Одинаковые одновременные запросы (5) и одинаковое общее количество запросов (111) были запущены для обоих. У Amazon лучше память, чем у моей локальной машины. Но на моем локальном компьютере 2 процессора против 1 процессора в m1.medium. В настоящий момент у меня очень низкая скорость интернета, я получаю скорость передачи 25,29 Кбит / с. Как я могу улучшить производительность?
Не знаю, как интерпретировать Connect, Processing, Waiting и total в выводе ab.
Here is Localhost:
Server Hostname: localhost
Server Port: 9999
Document Path: /
Document Length: 7631 bytes
Concurrency Level: 5
Time taken for tests: 1.424 seconds
Complete requests: 111
Failed requests: 102
(Connect: 0, Receive: 0, Length: 102, Exceptions: 0)
Write errors: 0
Total transferred: 860808 bytes
HTML transferred: 847155 bytes
Requests per second: 77.95 [#/sec] (mean)
Time per request: 64.148 [ms] (mean)
Time per request: 12.830 [ms] (mean, across all concurrent requests)
Transfer rate: 590.30 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 1
Processing: 14 63 99.9 43 562
Waiting: 14 60 96.7 39 560
Total: 14 63 99.9 43 563
And this is production:
Document Path: /
Document Length: 7783 bytes
Concurrency Level: 5
Time taken for tests: 33.883 seconds
Complete requests: 111
Failed requests: 0
Write errors: 0
Total transferred: 877566 bytes
HTML transferred: 863913 bytes
Requests per second: 3.28 [#/sec] (mean)
Time per request: 1526.258 [ms] (mean)
Time per request: 305.252 [ms] (mean, across all concurrent requests)
Transfer rate: 25.29 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 290 297 14.0 293 413
Processing: 897 1178 63.4 1176 1391
Waiting: 296 606 135.6 588 1171
Total: 1191 1475 66.0 1471 1684
Во-первых, наличие 2 ЦП против 1 ЦП определенно большая разница. В зависимости от множества других факторов, одно это может объяснить некоторую разницу в производительности. Однако большой проблемой здесь является подключение.
Насколько я понимаю, вы хотите знать, почему экземпляр Amazon намного медленнее, чем ваш локальный компьютер? Даже если характеристики оборудования предполагают, что они должны быть относительно сопоставимы? Я предполагаю, что у вас такая же установка, запущенная локально и на инстансе Amazon EC2. Когда вы запускаете тестовый тест, вы запускаете его на обоих компьютерах с локального компьютера. Кроме того, мы видим, что скорость вашего интернет-соединения довольно низкая.
Что происходит, так это то, что время, необходимое для запуска теста по сети, заставляет весь тест занять намного больше времени, чем запускать его локально. Полный ответ намного длиннее, чем я могу здесь изложить (он включает в себя способ работы веб-запросов и HTTP, а также то, как работает TCP, его трехстороннее рукопожатие для установления соединения и то, как ограничения задержки и пропускной способности влияют на производительность сети). Короткий ответ заключается в том, что вы не тестируете оборудование друг против друга при запуске этого теста, вы тестируете сетевое соединение. И LAN (как правило) всегда будет WAN.
Это также иллюстрирует серьезную ловушку, которая ловит множество разработчиков (веб-разработчиков, а не всех, у кого есть приложения, которые обмениваются данными по сети). Люди часто тестируют свой веб-сайт, приложение или что-то еще, пока оно работает на машине рядом с ними, и думают: «Вау! Это потрясающе быстро. Я потрясающий!». Что они забывают сделать, так это протестировать его под условия реального мира. Тот факт, что у вас есть 23-дюймовый широкоформатный монитор, не означает, что это делают все. Тот факт, что вы запускаете свой веб-браузер в полноэкранном режиме, не означает, что все делают это. Конечно, загрузка данных по локальной сети выполняется быстро, но что насчет кого-то на полпути? Это те вещи, которые необходимо учитывать при разработке веб-страницы или сетевого приложения.