Разочаровывает, не так ли?Я пытаюсь сделать то же самое, посмотрите, как мой недавно настроенный и настроенный выделенный сервер сравнивается с другими.
Я заканчиваю тем, что сравниваю свой текущий производственный сервер (двухъядерный ОЗУ 4 ГБ) с новым сервером(Четырехъядерный ОЗУ 8 ГБ).
Мне нужно «хорошо играть» со своими параллельными сравнениями, поскольку рабочий сервер работает, и я не хочу «ломать» сервер для своих пользователей.
Сравнение текущего и нового со следующей командой на странице php, которая просто вызывает phpinfo (): ab -kc 20 -t 60
На моем текущем производственном сервере,Я вижу что-то вроде следующего, где он не может выполнить задачу за заданный промежуток времени:
Time taken for tests: 60.1234 seconds
Complete requests: 24538
Failed requests: 58
(Connect: 0, Length: 58, Exceptions: 0)
Requests per second: 408.96 [#/sec] (mean)
Time per request: 48.905 [ms] (mean)
Time per request: 2.445 [ms] (mean, across all concurrent requests)
ПРОТИВ следующего на новом сервере, который выполнил все тесты за половину времени:
Time taken for tests: 29.838791 seconds
Complete requests: 50000
Failed requests: 11
(Connect: 0, Length: 11, Exceptions: 0)
Requests per second: 1675.67 [#/sec] (mean)
Time per request: 11.936 [ms] (mean)
Time per request: 0.597 [ms] (mean, across all concurrent requests)
Теперь это не совсем «честный» тест, поскольку текущий сервер обрабатывает 20 веб-сайтов в дополнение к тесту производительности.Кроме того, на самом деле это только тестирование apache & php.
Помещая этот же тест на одну из моих более сложных домашних страниц, которая на текущем сервере выглядит медленной, я вижу следующее: Текущий сервер:
Time taken for tests: 60.14170 seconds
Complete requests: 510
Requests per second: 8.50 [#/sec] (mean)
Time per request: 2353.497 [ms] (mean)
Time per request: 117.675 [ms] (mean, across all concurrent requests)
Новый сервер:
Time taken for tests: 60.18651 seconds
Complete requests: 1974
Requests per second: 32.89 [#/sec] (mean)
Time per request: 608.092 [ms] (mean)
Time per request: 30.405 [ms] (mean, across all concurrent requests)
Этот тест загружает динамически сгенерированную страницу Joomla CMS.Это немного больше теста «реального мира».Опять же, с новым сервером, не связанным с текущим трафиком сайта, так что это не сравнение яблок с яблоками.Я не хочу тестировать намного сложнее, или я рискую своим конечным пользователем на своих сайтах.
После переноса сайтов на новый сервер я планирую провести вышеописанные тесты еще раз, чтобы понять, что влияет на мой сайт.регулярный трафик сайта имеет на сравнительный анализ.Производительность той же машины в сравнении с результатами тестов на холостом ходу.
Теперь я также обращаю внимание на то, чтобы выделить новый сервер и убедиться, что он хорошо реагирует.Выполнение команды ab -n 50000 -c 200 Я наблюдаю за командой top и вижу, сколько ЦП и памяти используется, а также * f5 * ingстраницу в моем браузере, чтобы увидеть, если я получаю какие-либо ошибки, а также понять, сколько времени требуется серверу, чтобы ответить.
Мой первый тест дал мне:
Concurrency Level: 200
Time taken for tests: 692.160011 seconds
Complete requests: 50000
Failed requests: 30102
(Connect: 0, Length: 30102, Exceptions: 0)
Write errors: 0
Non-2xx responses: 30102
Total transferred: 456568770 bytes
HTML transferred: 442928962 bytes
Requests per second: 72.24 [#/sec] (mean)
Time per request: 2768.640 [ms] (mean)
Time per request: 13.843 [ms] (mean, across all concurrent requests)
Transfer rate: 644.17 [Kbytes/sec] received
Примечаниеочень высокая частота неудачных запросов.Мой apache настроен на максимум 250 одновременных запросов, но мой MySQL был только на 175. MySQL был точкой сбоя здесь.Он не может обработать все запросы, поступающие от Apache.Загрузка страниц моего веб-браузера давала мне страницу с ошибкой соединения MySQL при многих обновлениях страниц.
Итак, я увеличил MySQL до 300 одновременных запросов (я уже сделал это, но забыл перезапустить MySQL, так чтооказался хорошим тестом - я определил необходимое изменение и случайно сделал эмпирический тест, подтверждающий необходимость изменения).
Следующий запуск дал мне следующие результаты:
Concurrency Level: 200
Time taken for tests: 1399.999463 seconds
Complete requests: 50000
Failed requests: 5054
(Connect: 0, Length: 5054, Exceptions: 0)
Write errors: 0
Non-2xx responses: 5054
Total transferred: 1016767290 bytes
HTML transferred: 995713274 bytes
Requests per second: 35.71 [#/sec] (mean)
Time per request: 5599.998 [ms] (mean)
Time per request: 28.000 [ms] (mean, across all concurrent requests)
Transfer rate: 709.24 [Kbytes/sec] received
Это заняло вдвое больше времени, но частота неудачных запросов была намного ниже.По сути, сервер теперь настроен на обработку не менее 200 одновременных просмотров страниц одной из домашних страниц моего сайта, но для их обслуживания потребуется 5 секунд на страницу.Не очень, но намного лучше, чем ошибки MySQL, которые я получал ранее.
Во время всего этого загрузка ЦП моего сервера достигает 100%, а средняя нагрузка превышает 180. MySQL использует около8-9% ЦП и не использует большую часть оперативной памяти, которую я выделил, так как я просто многократно нажимаю на одну и ту же страницу, поэтому она имеет дело только с одной базой данных.400 МБ из 4 ГБ + он настроен для роста. top показывает использование буферов и кэшированной памяти примерно на 50% от общего объема доступной оперативной памяти.Поэтому, пока я загружаю машину этим тестом, она не приближается к перегруженной точке.При использовании базы данных реального мира MySQL должен захватывать большую часть памяти, которую я выделил, поэтому на этом этапе сервер должен быть почти полностью загружен.
Мой следующий тест состоял в тестировании apache при «полной нагрузке» 250 соединений ab -n 50000 -c 250
Concurrency Level: 250
Time taken for tests: 1442.515514 seconds
Complete requests: 50000
Failed requests: 3509
(Connect: 0, Length: 3509, Exceptions: 0)
Write errors: 0
Non-2xx responses: 3509
Total transferred: 1051321215 bytes
HTML transferred: 1029809879 bytes
Requests per second: 34.66 [#/sec] (mean)
Time per request: 7212.577 [ms] (mean)
Time per request: 28.850 [ms] (mean, across all concurrent requests)
Transfer rate: 711.73 [Kbytes/sec] received
Это показывает результаты, аналогичные тесту 200 подключений с надлежащим ограничением подключения MySQL. Это хорошо для меня, я думаю. Мне не нравится 7 секунд, чтобы вернуть страницу, но я думаю, что могу улучшить это на уровне Joomla, включив кеширование в Joomla либо с помощью APC или Memcache, которые оба установлены, но еще не используются Joomla.
Пытаясь испытать удачу, я подумал, что попробую 300 одновременных соединений. ab -n 50000 -c 300 Браузер показывает долгое ожидание быстрой загрузки страницы. В противном случае, не очень много изменений в результатах.
Concurrency Level: 300
Time taken for tests: 1478.35890 seconds
Complete requests: 50000
Failed requests: 2266
(Connect: 0, Length: 2266, Exceptions: 0)
Write errors: 0
Non-2xx responses: 2266
Total transferred: 1079120910 bytes
HTML transferred: 1057241646 bytes
Requests per second: 33.83 [#/sec] (mean)
Time per request: 8868.215 [ms] (mean)
Time per request: 29.561 [ms] (mean, across all concurrent requests)
Transfer rate: 712.99 [Kbytes/sec] received
Я не знаю, является ли моя интерпретация этих результатов «правильной» или я упускаю что-то ценное, но из-за недостатка инструкций, которые я мог найти, я пришел к этому.
Я просто использовал результаты, чтобы убедиться, что у меня хороший уровень отклика - меня беспокоит отсутствие идеального показателя отклика, но я не знаю, как увидеть или воспроизвести ошибки, чтобы я мог их осмотреть.
Медленное время на запрос также касается меня, но я думаю, что могу решить большую часть этого на прикладном уровне.
Я уверен, что хотя сервер будет медленно сканировать, он может справиться с большой нагрузкой.
Просмотр этих инструментов настройки производительности, таких как MonYog, после этих сравнительных тестов также показал, что мои текущие конфигурации «достаточно хороши».
Хотелось бы, чтобы было место, где люди могли публиковать результаты тестов, которые я могу воспроизвести с описанием аппаратного обеспечения и программными конфигами, чтобы я знал, насколько я «конкурентоспособен» или у меня еще много работы, чтобы лучше всего использовать мой оборудование. Итак, почему я публикую свои результаты.