gzipped анализ пакетов ответа Apache
-
11-07-2019 - |
Вопрос
После включения сжатия gzip на моем сервере Apache (mod_deflate) я обнаружил, что конечный пользователь обслуживается в среднем на 200 мс медленнее, чем несжатые ответы. Р>
Это было неожиданно, поэтому я изменил директиву сжатия для ТОЛЬКО сжатия текстовых / HTML-ответов, запустил wireshark и посмотрел на сетевой дамп до и после сжатия.
Вот мои наблюдения за GET с минимальным трафиком в сети
Перед сжатием
Transactions on the wire: 46 Total time for 46 trans: 791ms i. TCP seq/ack: 14ms ii. 1st data segment: 693ms iii. Remaining: 83ms (27/28 data units transferred + tcp/ip handshakes)
После сжатия
Transactions on the wire: 10 Total time for 46 trans: 926ms i. TCP seq/ack: 14ms ii. 1st data segment: 746ms iii. Remaining: 165ms (5 out of 6 data units transfered)
После того, как было установлено сжатие, становится ясно и понятно, что количество транзакций в сети значительно меньше, чем несжатого. Р>
Однако сжатый блок данных занял гораздо больше времени для передачи от источника к месту назначения. Р>
Похоже, что дополнительная работа по сжатию занимает определенное время, но не может понять, почему при сжатии каждая отправляемая информация была значительно медленнее. Р>
Мое понимание процесса сжатия таково:
1. GET Request is received by Apache 2. Apache identifies resource 3. Compress the resource 4. Respond with compressed response
С этой схемой я бы предположил, что третий шаг - это (шаг до самого первого сегмента ответа займет больше времени, так как мы - сжимаем + отвечаем - но остальное из кусков, которые я предположил, должны занимать в среднем равное время как несжатые куски, но это не так.
Может кто-нибудь сказать мне, почему ... или предложить лучший способ проанализировать этот сценарий. Также есть ли у кого сравнение до и после ... Буду признателен за любые отзывы / комментарии / вопросы
Решение
Я использовал недостаточный тест для сравнения двух сценариев (я думаю, что менее 100 ресурсов). При достаточном количестве тестов - более 6000 URL-адресов он показал, что сжатое время отклика на первый байт было быстрее на 200 миллисекунд при обслуживании текста / html, тогда как TTLB был быстрее на 25 миллисекунд в среднем.
Я не проверил нагрузку, и я собираюсь обновить этот ответ.