Я бегаю amazon aws ec2
микро экземпляр на Ubuntu 14.04
с участием apache 2.4.9
. Причина наличия этого экземпляра - просто протестировать и исправить некоторые ошибки перед сворачиванием проекта. В настоящее время очень мало людей (<10) используют проект нерегулярно (<20 раз в день). В моем проекте я использую минификацию, поэтому у меня там только немного статического контента: например, 1 файл css и может быть 3 файла js. Они не очень большие, а сумма всех файлов меньше 300 Кб.
Рассматривая диаграмму водопада после загрузки моего проекта,
Я заметил, что много времени тратится на фаза ожидания (если уберу, то, скорее всего, сайт загрузится более чем в 2 раза быстрее). Также я знал, чему соответствует каждая из этих фаз (я даже ответил очень актуальным вопрос здесь), Не знаю, что именно можно сделать, чтобы уменьшить время ожидания. В моем случае добавляется большое время ожидания для статических ресурсов, таких как css / js / img, поэтому это не имеет ничего общего с написанием более эффективного кода.
Я также нашел еще один очень актуальный вопрос здесь (это на самом деле тот же вопрос, что и у меня) и попытался последовать совету, переключив HostnameLookups Off
но это вообще ничего не изменило.
у меня нет /etc/httpd/conf/httpd.conf
, поэтому я добавил его в /etc/apache2/sites-available/000-default.conf
. Также у меня нет ничего похожего LogFormat
в моем конфиге, поэтому я пропустил эту часть.
Что я могу сделать, чтобы сократить это время? Когда я просматриваю ту же диаграмму, собранную с места нахождения сервера, я вижу небольшое улучшение времени ожидания, но ситуация остается той же.
Я понимаю, что могу перейти на лучший сервер с лучшим HDD / RAM / CPU, но это очевидно. Зная, что существует так много параметров конфигурации для apache, я думаю, что там есть что-то для настройки.
P.S. благодаря JakeGould я заглянул в apache2.conf
и модифицировал его (не 000-default.conf
Как я упоминал ранее). Я также модифицировал KeepAliveTimeOut
до 3 и MaxKeepAliveRequests
до 20, что больше подходит для моего сайта.
Согласно Документация Chrome, время ожидания - «Время ожидания первоначального ответа». - но вы это уже знали.
Кажется, что нет никаких дополнительных объяснений, но согласно временной шкале ниже, стадия «ожидания» логически будет выглядеть либо задержкой в сети, либо обработкой веб-сервера, то есть временем между отправкой запроса на ресурс и получением первый байт ответа.
Вы сказали, что используете Amazon EC2, но не сказали, какой тип инстанса используете. Инстансы Amazon абсолютно не одинаковы, и некоторые из них имеют более низкий приоритет хранилища, чем другие, также как для ЦП и сетевого трафика, поэтому вам будет полезно проанализировать свои узкие места - ваш диск не должен быть перегружен, чтобы он стал узким местом . Вы можете попробовать перейти на инстанс с поддержкой SSD, например m3.medium или m3.large.
Чтобы измерить свой iowait, используйте iostat
команда (содержащаяся в sysstat
пакет на Ubuntu) с подходящим периодом времени, пока вы делаете свои тестовые запросы.
Еще одним спорным ресурсом может быть RAM. Linux обычно неплохо умеет кэшировать файлы в памяти, но если у вас недостаточно «свободной» ОЗУ, Apache будет записывать все файлы на диск.
Это проблема с жестким диском. Скорее всего, диск, на котором вы работаете, находится под большой нагрузкой, и требуется время, чтобы получить данные с диска.
Я не думаю, что есть способ контролировать это на Amazon. Вы можете попытаться сохранить наиболее важный контент в кеше, возможно, создав небольшой виртуальный диск с наиболее важным статическим содержимым.
Но лучший совет при любых проблемах с Amazon EC2 - это выйти на хуй и использовать свой собственный выделенный сервер. Это плохого качества (вспомните аварии - облачно, амазонка), небезопасно, доступно ЦРУ + АНБ и очень дорого.