Нагрузочное тестирование
Очень часто появляется необходимость протестировать работу сервера под реальной нагрузкой. Например, предприятие хочет закупить новое оборудование для развертываемого приложения, и необходимо узнать, насколько мощное оборудование необходимо закупать. Полезно было бы посмотреть, как поведет себя сервер, если с ним будут работать одновременно, например, 100 пользователей, но непонятно, как можно организовать такую проверку.
Данное исследование будем проводить на персональном компьютере с процессором Core i5 2410M 2300 Mhz. Это процессор, имеющий 2 физических ядра, на каждом из которых работают по 2 логических. Остальные характеристики компьютера не являются столь важными для данного исследования.
Для выполнения исследования, нам необходимо имитировать множества обращений клиентов к серверу. Для этого было разработано приложение, позволяющее ежесекундно посылать обрабатываться большое количество запросов к серверу. Данное приложение является многопоточным и рассчитано на то, что процессор машины будет иметь несколько физических или логических ядер. При помощи этого приложения можно определить загруженность процессора, среднее число обрабатываемых запросов (в секунду), а так же можно выбрать степень сложности запроса (простой, средний или сложный). Вид приложения представлен на рисунке .
Приложение позволяет нам построить связь между числом обрабатываемых запросов в единицу времени и текущей загруженностью процессора. Соберем данные для трех запросов различной сложности, отобразим их в таблице и построим соответствующие графики.
Рисунок 29. Приложение для осуществления нагрузочного тестирования
Стресс-тестирование при простом запросе
Для данного тестирования использовался следующий запрос: Выбрать пользователя, ID которого равен 1
Select *from tblUsers Where UserID=1
Результаты тестирования представлены в таблице .
Таблица 24. Тестирование на простом запросе | |||||
Число заявок (в сек) | 0 | 6000 | 9800 | 11400 | 12700 |
ЦП | 3% | 40% | 77% | 98% | 100% |
Рисунок 30
Стресс-тестирование на запросе средней сложности
Для данного теста использовался запрос: выбрать все совершенные платежи клиента с ID, равным 1
EXEC sp_get_payments 1; (запрос обращается к 4 таблицам)
Результаты тестирования представлены в таблице .
Таблица 25. Тестирование на простом запросе | |||||||
Число заявок (в сек) | 0 | 160 | 230 | 520 | 630 | 650 | 670 |
ЦП | 3% | 30% | 42% | 52% | 80% | 98 | 100 |
Рисунок 31
Стресс-тестирование на сложном запросе
Для данного теста использовался запрос: показать все курсы, на которые может записаться восьмиклассник, если предмет обучения включает комбинацию символов “англ”, а название курса включает комбинацию символов “adv”
EXEC sp_get_courses_using_class '%англ%','%adv%', 8
(запрос обращается к 6 таблицам)
Результаты тестирования представлены в таблице .
Таблица 26. Тестирование на простом запросе | |||||
Число заявок (в сек) | 0 | 110 | 240 | 310 | 330 |
ЦП | 3% | 35% | 58% | 85% | 100% |
Рисунок 32
Результаты показали, что степень загруженности процессора зависит от степени сложности процессора не меньше, чем от числа обрабатываемых запросов в единицу времени. Так, например, сервер будет работать на всю мощь, если к нему каждую секунду будут обращаться 12000 пользователей с простым запросом, или всего 330 со сложным. Такие результаты вполне могут устроить тех, кто рассчитывает посещаемость своего сайта в 1000-10000 человек в день. Но для сайтов с большой посещаемостью, этого недостаточно. Основное и при этом простое правило, которого должен придерживаться веб-программист, звучит так: “Страница должна грузиться не более 3-5 секунд”. И если это происходит дольше, нужно переписывать его код заново, либо использовать другие решения.
Рассмотрим зависимость времени, требуемого для загрузки страницы, от числа запросов, направляемых к серверу ежесекундно. Так как число запросов в единицу времени непосредственно влияет на производительность компьютера, достаточно будет провести анализ на запросе любого уровня сложности.
Для вывода результатов тестирования, поместим на страницу сайта поле TextBox, куда будет переноситься информация о времени загрузки страницы. После этого начнем непрерывно посылать запросы к базе данных, постепенно увеличивая их число. Результаты отразим в таблице и на графике.
Таблица 27. Время загрузки веб-страницы при различных уровнях загруженности сервера | |
Время загрузки страницы, когда никто не обращается к базе и ЦП работает на 1-3% | Время загрузки страницы при максимально возможном числе обращений к базе, когда ЦП работает на 98-100% |
0 с 153 мс | 0 с 812 мс |
0 с 262 мс | 0 с 966 мс |
0 с 98 мс | 0 с 396 мс |
0 с 112 мс | 1 с 72 мс |
0 с 394 мс | 0 с 403 мс |
0 с 324 мс | 0 с 850 мс |
0 с 361 мс | 1 с 417 мс |
0 с 25 мс | 0 с 862 мс |
Среднее: 0 с 216 мс | Среднее: 0 с 847 мс |
При максимальной загрузке сервера время загрузки веб-страницы в 4 раза больше, чем когда ЦП сервера не загружен. Тем не менее, это время считается удовлетворительным по отношению к веб-сайту, так как меньше 3 секунд. Такие результаты были получены в результате следования основным принципам программирования и создания веб-сайтов, а именно:
Использование хранимых процедур для получения доступа к данным;
Хеширование основных запросов;
Загрузка не всей веб-страницы, а только необходимых данных (при использовании Ajax и Jscript);
Улучшение и оптимизация кода.
Как еще можно увеличить скорость загрузки страниц:
Оптимизация таблиц стилей CSS
Не редко бывает, что таких CSS стилей оказывается несколько, а, ведь браузер делает запрос для каждого стиля, на что тратится дополнительное время. В связи с этим лучше всего объединить существующие стили в один файл.
Но это ещё не всё, полученный файл можно оптимизировать. Удалить пробелы, ненужные строки, сократить информацию о цветах. Например, заменить белый цвет “#FFFFFF” на короткое написание “#FFF”. Всё это в итоге скажется на размере конечного файла и процесс загрузки пусть немного, но ускорится.
Таблицы стилей лучше всего подключать в области тега HEAD, он находится в верхней части веб-страницы;
Оптимизация JavaScript
Коды самих скриптов и строк для подключения дополнительных библиотек, в отличие от CSS стилей, нужно помещать в конец страницы сайта. Связано это с тем, что браузер, находя JavaScript код, приостанавливает загрузку страницы до того момента пока не закончит обработку этого кода полностью. Кроме того, как и в случае с таблицами стилей, файлы со скриптами также стоит объединить;
Использование CSS спрайтов
В случае использования технологии CSS спрайтов всё множество запросов на картинки заменятся на один единственный. Суть этого подхода в том, что создаётся одна картинка, в которой в определённых местах с заранее известным местоположением размещаются несколько, в среднем до 20, которые ранее подгружались отдельно. Теперь не нужно писать несколько строк с подключением каждой картинки, а указать одну строку для вызова общей, и в дальнейшем просто указать определённые отступы для конкретной картинки, которая необходима. Таким способом мы сократим число запросов от браузера примерно с 20 до 1!
Увеличение производительности серверной машины
Использование нескольких серверов
- Оглавление
- Аналитический раздел
- Общая постановка задачи
- Классические задачи принятия решений.
- Многостадийный процесс
- Задача линейного программирования
- Задача о распределении ресурсов
- Транспортная задача
- Формула 11. Транспортная задача
- Вывод по аналитическому разделу
- Конструкторский раздел
- Сценарий работы программы
- Расчет функции прогнозируемой прибыли
- Формула 13
- Предлагаемый алгоритм работы программы
- Алгоритмформирования групп для текущего распределения
- Алгоритм поиска нового распределения для данного курса
- Диаграмма классов
- Спецификация основных классов
- Требования к бд
- Концептуальная модель базы данных
- Спецификации таблиц
- Вычисление расстояния поGps-координатам
- 1. Сферическая теорема косинусов
- 2. Формула гаверсинусов
- Формула 16. Формула гаверсинусов
- 3. Модификация для антиподов
- Формула 17. Формула для антиподов
- Технологический раздел
- Требования к вычислительной системе
- Выбор субд
- Выбор среды разработки
- Выбор языка программирования
- Используемые технологии asp.Net
- Ado.Net
- Пользовательский интерфейс
- Интерфейс приложения
- Интерфейс веб-приложения
- Развертывание системы
- Функциональная декомпозиция системы по уровням
- Исследовательский раздел
- Исследование зависимости времени работы алгоритма от числа учащихся
- Нагрузочное тестирование
- Вывод по исследовательскому разделу
- Организационно-экономический раздел
- Организация и планирование процесса разработки
- Расчет трудоемкости выполнения работ
- Расчет количества исполнителей
- Календарный план-график разработки программного продукта
- Расчет стоимости программного продукта
- Расчет экономической эффективности
- Промышленная экология и безопасность
- Анализ вредных и опасных факторов
- Освещенность
- Электрические и магнитные поля
- Статическое электричество
- Электробезопасность
- Опасность возникновения пожара
- Вибрация
- Травматизм
- Микроклимат
- Расчет системы освещенности
- 6.2.1 Расчет площади светопроемов
- Расчет искусственного освещения
- 6.3.1 Общее освещение
- 6.3.2 Местное освещение
- Заключение
- Список использованных источников