Как я могу узнать, почему мое приложение работает медленно? - PullRequest
2 голосов
/ 25 марта 2009

У меня есть простое приложение Rails, развернутое на Slicehost VPN 500 МБ. Я единственный, кто использует приложение. Когда я запускаю его на своем ноутбуке, это достаточно быстро. Но развернутая версия безумно медленная. Загрузка экрана входа в систему занимает 6-10 секунд.

Я хотел бы выяснить, почему это так медленно. Это мой код? (Не думайте, потому что это намного быстрее локально, но возможно.) Является ли сервер Slicehost перегруженным? Это интернет?

Может ли кто-нибудь предложить метод или набор шагов, которые я могу предпринять, чтобы помочь выяснить причину этой проблемы?


Обновление:

Извините, забыл упомянуть. Я использую его под CentOS 5, используя Phusion Passenger (AKA mod_rails или mod_rack).

Ответы [ 10 ]

5 голосов
/ 25 марта 2009

Если в первый раз вы загружаетесь медленно, это, вероятно, из-за того, что пассажир убил процесс из-за неактивности. Я не помню всех деталей, но я помню, как читал людей, которые использовали задания cron, чтобы сохранить хотя бы один процесс, чтобы избежать задержки, которая может возникнуть с пассажиром, необходимым для перезагрузки среды.

Редактировать: подробнее здесь

В частности - время простоя пула по умолчанию равно 2 минутам, что означает, что после двух минут простоя пассажиру потребуется перезагрузить среду для обслуживания следующего запроса.

4 голосов
/ 25 марта 2009

Во-первых, выясните, есть ли особенно медленный ответ от сервера. Используйте Firefox и плагин Firebug, чтобы увидеть, сколько времени занимает загрузка каждого компонента (включая JavaScript и графику). Предполагая, что сама главная страница - это то, что занимает все время, вы можете начать профилирование приложения. Вам нужно будет найти хороший профилировщик, и, поскольку я на самом деле не работаю в Ruby on Rails, я не могу предложить какой-либо вариант: google "profile ruby ​​on rails" для некоторых вариантов.

Как указывает YenTheFirst, используемое вами серверное программное обеспечение и конфигурация могут способствовать замедлению, но A) slicehost не выбирает этого, вы делаете это, поскольку Slicehost просто предоставляет очень необработанные серверные «кусочки», которые вы можете обработать как выделенные машины. Б) вряд ли вы увидите, что скрипт, который запускается мгновенно, внезапно занимает 6 секунд только потому, что он работает как CGI. Что-то еще должно происходить. Проверьте, сколько оперативной памяти вы используете: у вас есть своп? Является ли вход в систему медленным только при первом обращении, что указывает на некоторую проблему с запуском, или это всегда так медленно? Статический контент подается медленно? Это может означать, что некоторые проблемы с сетью (либо на стороне Slicehost, либо в вашей локальной сети) замедляют процесс, предполагая, что вы не в свопе.

Когда вы говорите «достаточно быстро», вы расплывчаты: версия для ноутбука занимает 1 секунду до Slicehost 6? Это не было бы совершенно удивительно, если бы ноутбук был приличным: в конце концов, причина в том, что срезы дешевы, потому что они являются частью полноценного сервера. Вы используете, вероятно, 1/32 от 8-ядерного компьютера в Slicehost, в отличие от обоих ядер современного ноутбука. Ядра Slicehost быстрые, но ваш ноутбук может быть кричащим по сравнению с 1/4 ядра. :)

3 голосов
/ 26 марта 2009

Попробуйте указать точку, в которой лежит медлительность

1 / приложение работает медленно или инфраструктура (сеть + веб-сервер)

  • поместите статический файл на ваш веб-сервер и получите к нему доступ через браузер

2 / Если это быстро, вероятно, проблема с настройкой приложения + сервера.

  • медленный доступ к базе данных
  • попробуйте страницу с циклом simpel: это медленно?

3 / Если он медленный, то это, вероятно, ваша инфраструктура. Вы можете проверить:

  • плохое сетевое соединение: выполнить захват пакета (например, с помощью Wireshark) и найти повторные передачи, дублированные пакеты и т. Д.
  • Разрешение DNS медленное?
  • сервер неправильно настроен?
  • и т.д.
1 голос
/ 26 марта 2009

Возможно, вы захотите проверить об / мин (есть также бесплатная "облегченная" версия) и / или Tune Up от New Relic .

1 голос
/ 25 марта 2009

Возможно, вы захотите запустить локальную виртуальную машину с 500 МБ. Вы много взаимодействуете между клиентом и сервером? Задержки по глобальной сети значительны

1 голос
/ 25 марта 2009

Много ли у вас данных в вашей БД? Я бы дважды проверил, что вы проиндексировали все соответствующие столбцы, потому что это может иметь огромное значение. В вашей локальной системе разработки у вас, вероятно, гораздо больше памяти, чем в 500-мегабайтном срезе, что приведет к тому, что БД будет работать намного медленнее, если у вас большие неиндексированные таблицы. Вы также можете запустить регистратор медленных запросов в MySql, чтобы точно определить столбцы без индексов.

Кроме этого, да, пассажиру нужно будет подстроить процесс для вас, если вы недавно не пользовались сайтом. Если это так, то вы должны увидеть значительное увеличение скорости при загрузке второй и особенно третьей и более поздних страниц.

1 голос
/ 25 марта 2009

Что использует Slicehost для обслуживания? Быстрые варианты - это такие вещи, как: Mongrel или apache mod_rails (также называемый пассажирским что-то вроде того) Это выделенные серверы (или плагины для серверов), которые запускают экземпляр вашего приложения rails.

Если ваш хост не использует это, то, вероятно, по умолчанию используется CGI. Rails поставляется с простым CGI-скриптом, который будет обслуживать страницу, но он перезагружает приложение для каждой страницы.

(edit: я подозреваю, что это наиболее вероятный случай, когда ваше приложение запускается из CGI в /webapp_directory/public/dispatch.cgi, что объясняет медлительность. Обычно это развертывание по умолчанию на многих хосты, так как это не требует дополнительной настройки с их стороны, но не дает хорошей производительности)

Если ваш хост поддерживает "Fast CGI", rails также это поддерживает. Fast CGI откроет сеанс CGI и сохранит его открытым для нескольких страниц, так что вы получите гораздо лучшую производительность, но она не так хороша, как Mongrel или mod_rails.

Во-вторых, это в режиме «производства» или «разработки»? Самый простой способ узнать это - перейти на страницу вашего приложения, которая выдает ошибку. Если он показывает трассировку стека, он находится в режиме разработки, который медленнее, чем производственный режим. Mongrel и mod_rails имеют параметры запуска, чтобы определить, следует ли запускать приложение в производственном режиме или в режиме разработки.

Наконец, если по какой-либо причине ваша база данных работает медленно, это также будет большим узким местом. Если у вас есть хорошее развертывание (Mongrel / mod_rails / etc.) В производственном режиме, попробуйте разобраться в этом.

0 голосов
/ 20 апреля 2009

Вы можете попробовать запустить top при входе в SSH, чтобы увидеть, какой процесс тяжелый. Если у вас также есть проблемы с регистрацией, возможно, вы можете попытаться получить статистику в менеджере Slicehost.

Если вы обнаружите, что это ошибка MySQL, рассмотрите возможность уменьшения количества серверов, которые он может создавать.

512 выглядит прилично для Rails-приложения, возможно, вам придется проверить, не настроены ли вы тоже.

0 голосов
/ 06 апреля 2009

Если вы используете FireFox и проводите локальное тестирование (или, может быть, даже в локальной сети), вы можете попробовать отредактировать параметр network.dns.disableIPv6.

Введите about: config в адресную строку и укажите фильтр для network.dns.disableIPv6 и дважды щелкните, чтобы установить значение true.

Эта ошибка сообщается в основном из ОС Vista, но также и с некоторыми другими.

0 голосов
/ 25 марта 2009

Время работы вашего процессора гарантируется Slicehost с помощью системы виртуализации Xen, так что это не так. Нет других ответов для вас, извините! Попробуйте "top" на консоли, когда вы пытаетесь получить доступ к странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...