Несоответствия между стресс-тестом и реальным просмотром страниц
Я заметил, что новый сервер, который я настраиваю, работает намного медленнее, чем текущий сервер, и провел несколько стресс-тестов / сравнительного анализа для изучения проблемы.
Но после тестов я получаю противоречивые результаты.
Детали машины:
CentOS-6.4 (i386)
Apache 2.4.4
PHP 5.4.17
mySQL 5.6.12
8GB RAM
No cache
Это сайт Joomla.
Одно замечание: в данный момент доступ к этой машине возможен только через VPN (это может быть связано с медлительностью)
Я перезапустил httpd и mysql перед выполнением тестов.
Тесты:
просмотр:
Это медленнее (не только ощущается, но действительно медленнее при просмотре, с любым типом браузера (Safari, Firefox, Chrome, IE), я не рассчитывал время, но это медленнее, чем текущий сайт и без какого-либо другого пользователя).).
Отладка через Joomla:
Я включил отладку для домашней страницы, и на рендеринг уходит в среднем 1,294 секунды (через журнал этой отладки), в то время как тестирование на текущем сервере (та же конфигурация, но с CentOS 6.3 и PHP 5.3) занимает в среднем 0,762 секунд.
абы:
Я попробовал 5 пользователей одновременно, выполняя 1000 запросов, это было сделано с другой машины.
Я действительно боролся с этим, потому что для статического текстового файла или простого эха PHP это дало мне это:
Connection Times (ms) min mean[+/-sd] median max Connect: 3 5 1.7 5 17 Processing: 4 7 1.5 6 20 Waiting: 4 6 1.5 6 19 Total: 8 11 2.5 11 27
И домашняя страница Joomla:
Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 9 Processing: 321 423 115.8 403 1737 Waiting: 309 406 114.0 386 1706 Total: 322 423 115.9 403 1737
Во всяком случае, это быстрее, чем>1 секунда, которую я имел при просмотре (тест 1).
jmeter (2.9):
Я выполнил тест с 5 одновременными пользователями, выполняя 100 запросов за 2 секунды.
Статическая страница дала мне это среднее значение:
label # Samples Average Median 90% Line Min Max Error % Throughoutput KB/sec TOTAL 500 8 8 11 7 21 0.0 92.66123054114159 36.55051195329874
И домашняя страница дала мне это:
label # Samples Average Median 90% Line Min Max Error % Throughoutput KB/sec TOTAL 500 445 436 507 366 969 0.0 10.331645831180907 856.8125096859179
Напоследок вопрос:
Почему просмотр так медленно, зная, что стресс-тест (либо ab
или же jmeter
) дал мне гораздо более быстрые результаты? (Являются ли эти тесты адекватными или я должен попробовать что-то еще?)
(Я не знаю, может ли здесь быть виновата VPN, но это не объясняет скорость просмотра и скорость тестирования, оба должны быть подключены к VPN).
3 ответа
Я подозреваю, что ответ заключается в том, что делают браузеры, что jmeter
а также ab
нет.
А именно куки и javascript (и изображения, в некоторой степени).
Точно так же я бы сказал, что ваши тесты на самом деле не отражают реальный просмотр.
Когда я захожу на сайт, я не захожу на домашнюю страницу и перезагружаю страницу снова и снова. Я иду и нажимаю много разных вещей. Важным отличием здесь является то, что, если ваш сервер настроен правильно, тогда много сгенерированного кода операции PHP, сгенерированных фрагментов страницы и т. Д. Попадают в память, поэтому первый удар медленный, но все последующие быстрые.
Вы должны попытаться найти способ симулировать просмотр в реальном мире. Одна из моих идей - запустить Selenium IDE, записывать нажатия клавиш и клики во время просмотра, а затем снова и снова воспроизводить их на нескольких хостах.
VPN может быть ответственной, но теоретически должна вызывать большие издержки на обоих типах соединения, оба ab
и другие. и браузеры.
Я подозреваю, если вы бежите tcpdump
/wireshark
/ngrep
и т. д. на вашем сервере, когда вы ab
Таким образом, вы обнаружите, что загружается намного меньше ресурсов по сравнению с браузером.
Проверьте свою страницу с помощью инструмента типа "YSLOW", который может дать подсказку, где начинаются временные метки.
и я всегда проверял бы на наличие mysql slow_queries и использовал бы тюнинг-скрипт, чтобы оценить, является ли ваше узкое место вашим БД. если нет -> (вы уже сделали) проверьте производительность вашего веб-сервера с помощью простого статического файла; затем с ab; затем исследуйте всю страницу с помощью браузера и некоторых плагинов для веб-мастеров.
Как сказал Том, вы должны имитировать реальное поведение браузера. Для JMeter это довольно просто:
- Добавить HTTP Cookie Manager
- Добавить HTTP Cache Manager
- Добавьте HTTP Header Manager и настройте User-Agent браузера, который вы обычно используете.
- В параметрах HTTP-запроса или HTTP-запроса по умолчанию в параметре задачи "Проверка": получить все встроенные ресурсы из файлов HTML, чтобы имитировать браузер, извлекающий встроенные ресурсы (такие как gif, css, js и т. Д.)
- В опции "Задача проверки параметров" Использовать пул одновременных операций. Размер: н. Используйте 2-4 темы.