Я разработал небольшое приложение Rails, используя Rails 3.0.0 и Ruby 1.9.2. Во время теста на моем персональном компьютере производительность - это нормально. Я надел его на VPS для производства, используя Apache и mod_rails, а иногда производительность ужасна.Как мне понять, почему мое приложение rails 3 с помощью mod_rails работает так медленно?
Вот пример из production.log:
работы GET "/ трекер" для xx.xx.xx.xx в 2010-11-21 21:49:56 -0500
обработки по FleetsController индекс #, как HTML
Топленых раскладок/_stylesheets.html.haml (0.8ms)
Топленых макеты/_header.html.haml (1.0ms)
Топленых макеты/_footer.html.haml (0.0ms)
визуализации pages/about.html.haml в макетах/приложении (4,5 мс)
Завершено 200 OK в 15ms (Просмотров: 14.3мс | ActiveRecord: 0.0ms)работа GET "/ трекер /" для xx.xx.xx.xx в 2010-11-21 21:50:02 -0500
Обработки по FleetsController индекса #, как HTML
Оказываемых раскладки /_stylesheets.html.haml (0.7ms)
Топленых макетов/_header.html.haml (1.1ms)
Топленых макетов/_footer.html.haml (0.0ms)
Топленых флота/index.html.haml в пределах макетов/application (7.8ms)
Завершено 200 OK в 1901ms (Просмотров: 7.8ms | ActiveRecord: 1,5ms)работы GET "/ трекер/флоты/XXXXXXXXX" для xx.xx.xx.xx в 2010-11-21 21:50:06 -0500
обработки на FleetsController # показывают, как HTML
Параметры: { "идентификатор "=>" XXXXXXXXX "}
Топленых флотов/_details_inner.html.haml (1.2ms)
Топленых флотов/_details.html.haml (2.1ms)
Топленых флотов/_summary.html.haml (3.5ms)
Топленого флот/_scouts_inner.html.haml (1.3ms)
Топленых флота/_scouts.html.haml (3.5ms)
Топленых отчетов/_report.html.haml (0.5мс)
Топленых флота/_reports.html.haml (3.0ms)
Топленых флота/_recon_form.html.haml (39.9ms)
Топленых флота/_recon.html.haml (40.8ms)
Топленых пользователей/_user.html .haml (1.2ms)
Топленых флота/_pilots.html.haml (1.9ms)
Топленых макеты/_stylesheets.html.haml (0.5мс)
Топленых макетов/_header.html.haml (0.9ms)
Представленные макеты/_footer.html.haml (0.0ms)
Представленные флоты/show.html.haml в макетах/приложении (60.2мс)
Завершено 200 OK в 495ms (Просмотров: 59.1ms | ActiveRecord: 2.9ms)
У первого попадания не было доступа к базе данных. У второго есть доступ к базе данных, но для просмотров всего 7,8 мс, а для базы данных всего 1,5 мс, а вся страница не была полной в течение почти 2 минут!Это довольно распространенный пример, но у меня есть несколько записей журнала с 14 + секунд для ответа на страницу. И нет, это не во время загрузки начальных рельсов после перезагрузки.
Что может быть в это время?
1) Я неправильно истолковал отчеты о времени ActiveRecord, и это действительно просто кодовое время, но время базы данных в реальном времени - это время?
2) Я использую sqlite. Я знаю, что в конце концов мне, вероятно, придется переключиться на MySQL, так как у меня будут проблемы с параллелизмом, поскольку (большинство) каждый постраничный сайт вызывает запись базы данных. Но прямо сейчас у меня почти нет движения; одновременно, возможно, 15 человек на сайте. В приведенном выше примере журнала было только 1 удар за раз, с 4-6 секунд между каждым ударом. Я бы подумал, что sqlite может справиться с этим ...
3) Я нахожусь на общем VPS. Это означает, что возможно, какой-то другой пользователь на VPS делал что-то в то же самое время, из-за чего сервер замедлялся. В большинстве случаев у моего VPS очень низкая загрузка процессора, но это возможно, что мне не повезло, и что-то происходило в тот момент. Но я видел, что это случается достаточно часто, и я не покупаю это как ответ.
4) У VPS только 512 или 512 МБ памяти. Я показываю, что есть 150MB бесплатно, но возможно ли, что я просто нажимаю ограничения памяти, и это переключение страниц или что-то в этом роде?
5) Я также видел несколько BusyException в журнале. Я увеличил тайм-аут database.yml до 15 секунд (с 5), чтобы узнать, помогает ли это. Не сделали реального испытания, так как, чтобы убедиться, что это так.
Я знаю, что я, вероятно, не предоставил достаточно информации для вас, чтобы рассказать мне, что происходит, поэтому реальный вопрос: как я даже начинаю пытаться отслеживать это?
Все ли они с одного и того же IP-адреса? – 2010-11-22 20:59:38
Да, в этом примере эти три удара были от одного и того же пользователя. Других пользователей не было между ними. – 2010-11-23 02:06:08