Почему rails-приложение ужасно тормозит на сервере, хотя на локалхост все летает?

На сервере capistrano+unicorn+nginx развернуто приложение rails. До вчерашнего дня никаких тормозов не наблюдалось, никаких изменений в настройки сервера не вносил с самого начала, а начало было месяца два назад.

В терминале запускаю cap production deploy, после этого захожу на сайт все работает, без тормозов, даже быстрее чем на локалхосте, спустя минут пять случается какой-то "затык" и все начинает ужасно тормозить. Создание постов, комментариев, голосование, удаление, редактирование. Любая операция занимает от 5 до 20 секунд, кстати как и просто открытие страницы статьи. В логах никаких ошибок не нашел.
В начале подумал что проблема кроется в Turbolinks, но как оказалось нет. На продакшн-сервере обновил все программное обеспечение - не помогло.
Куда копать не знаю. Буду рад любой помощи!
Вот мой Gemfile:
source 'https://rubygems.org'
ruby '2.2.1'



gem 'rails', '4.2.1'
gem 'bootstrap-sass', '~> 3.3.6'
gem 'font-awesome-sass'
gem 'carrierwave'
gem 'mini_magick'
gem 'remotipart', '~> 1.2'
gem 'russian', '~> 0.6.0'

gem 'will_paginate', '~> 3.1.0'

gem 'sass-rails', '>= 3.2'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'


gem 'jquery-rails'

gem 'turbolinks'

gem 'jbuilder', '~> 2.0'

gem 'sdoc', '~> 0.4.0', group: :doc

gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook'
gem 'omniauth-vkontakte'
gem 'cancancan', '~> 1.10'
gem 'friendly_id', '~> 5.1.0'
gem 'cancancan', '~> 1.10'
gem 'rolify'


group :test do
  gem 'selenium-webdriver'
  gem 'capybara'
end

group :development, :test do
  gem 'sqlite3'
  gem 'rspec-rails'
  gem 'byebug'

  gem 'web-console', '~> 2.0'

  gem 'spring'
end
group :development do
  gem 'capistrano'
  gem 'capistrano-rails'
  gem 'capistrano-bundler'
  gem 'capistrano-rvm'
  gem 'capistrano-passenger'
  gem 'capistrano-bower'
end

group :production do
  gem 'pg'
  gem 'rails_12factor'
  gem 'unicorn'
end

Может еще какой-то файл нужно показать, не знаю, если что пишите.
--------
Обновлено 30/08
Сегодня настроил в конфиге бд лог медленных запросов. В начале что-то не так пошло, и сайт перестал отвечать вообще на запросы. Откатил обратно настройки конфига бд, все заработало. И, что меня совсем не радует, работает уже пару часов без сбоев очень быстро, как я только не изощрялся. Лучше бы я нашел проблему, теперь фиг пойми...
Как быть дальше?
-----
Вывод топ во время "затыка"
3ba14df44987497b8294a194ca16b3a5.png
  • Вопрос задан
  • 978 просмотров
Решения вопроса 1
@Pianista Автор вопроса
Сегодня настроил в конфиге бд лог медленных запросов. В начале что-то не так пошло, и сайт перестал отвечать вообще на запросы. Откатил обратно настройки конфига бд, все заработало. И, что меня совсем не радует, работает уже пару часов без сбоев очень быстро, как я только не изощрялся. Лучше бы я нашел проблему, теперь фиг пойми...
Как быть дальше?
______________________
Нашел решение проблемы! Она была в unicorn.rb
У меня не были прописаны секции before_fork и after_fork.
Сейчас мой unicorn.rb выглядит так:
APP_PATH = File.expand_path('../../', __FILE__)

working_directory APP_PATH
listen            APP_PATH + '/tmp/sockets/unicorn.sock'
worker_processes  2
timeout           30
preload_app       true

before_exec do |server|
  ENV['BUNDLE_GEMFILE'] = APP_PATH + '/Gemfile'
end

before_fork do |server, worker|
  ActiveRecord::Base.connection.disconnect! if defined?(ActiveRecord::Base)
end

after_fork do |server, worker|
  ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base)
end
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
alsopub
@alsopub
Странно что еще не спросили - а что показывает top ?
Может просто памяти не хватает и все уходит в своп.
Ответ написан
miraage
@miraage
Старый прогер
Держу пари, база данных тормозит приложение.
Профилируейте вызовы к базе, смотрите логи базы.
Ответ написан
VGrabko
@VGrabko
Golang, Php, Js
В конфиге бд настройте лог медленных запросов.
Ответ написан
@arruah
Это подтверждает версию о том, что проблема была в СУБД. Копайте в ту сторону.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы