Несоответствия между стресс-тестом и реальным просмотром страниц

Я заметил, что новый сервер, который я настраиваю, работает намного медленнее, чем текущий сервер, и провел несколько стресс-тестов / сравнительного анализа для изучения проблемы.

Но после тестов я получаю противоречивые результаты.

Детали машины:

CentOS-6.4 (i386)
Apache 2.4.4
PHP 5.4.17
mySQL 5.6.12
8GB RAM
No cache

Это сайт Joomla.

Одно замечание: в данный момент доступ к этой машине возможен только через VPN (это может быть связано с медлительностью)

Я перезапустил httpd и mysql перед выполнением тестов.

Тесты:

  1. просмотр:

    Это медленнее (не только ощущается, но действительно медленнее при просмотре, с любым типом браузера (Safari, Firefox, Chrome, IE), я не рассчитывал время, но это медленнее, чем текущий сайт и без какого-либо другого пользователя).).

  2. Отладка через Joomla:

    Я включил отладку для домашней страницы, и на рендеринг уходит в среднем 1,294 секунды (через журнал этой отладки), в то время как тестирование на текущем сервере (та же конфигурация, но с CentOS 6.3 и PHP 5.3) занимает в среднем 0,762 секунд.

  3. абы:

    Я попробовал 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).

  4. 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 это довольно просто:

  1. Добавить HTTP Cookie Manager
  2. Добавить HTTP Cache Manager
  3. Добавьте HTTP Header Manager и настройте User-Agent браузера, который вы обычно используете.
  4. В параметрах HTTP-запроса или HTTP-запроса по умолчанию в параметре задачи "Проверка": получить все встроенные ресурсы из файлов HTML, чтобы имитировать браузер, извлекающий встроенные ресурсы (такие как gif, css, js и т. Д.)
  5. В опции "Задача проверки параметров" Использовать пул одновременных операций. Размер: н. Используйте 2-4 темы.
Другие вопросы по тегам