nginx и unicorn заваливают ошибками

217 views
Skip to first unread message

Stanislav

unread,
Sep 5, 2013, 11:30:07 AM9/5/13
to ror...@googlegroups.com
Здрасте,

Переезжаю с heroku на виртуальный сервер и все никак не могу настроить нормально nginx и unicorn. Последние дня три дня сервер просто заполонило ошибками - то 502 то 504 и практический уже не встает (довел бедного).

с такими логами от nginx:

2013/09/03 16:58:50 [error] 2074#0: *2859 upstream prematurely closed connection while reading response header from upstream, client: 110.164.235.2, server: gamestockgfx.com, request: "GET / HTTP/1.1", upstream: "http://unix:/home/deployer/gamestockgfx/current/tmp/gsg.socket:/", host: "gamestockgfx.com"

2013/09/02 23:54:01 [error] 2074#0: *2765 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 101.109.151.30, server: gamestockgfx.com, request: "GET /t/categories/Background HTTP/1.1", upstream: "http://unix:/home/deployer/gamestockgfx/current/tmp/gsg.socket:/t/categories/Background", host: "**.com"

и такие вот логи от unicorn:
E, [2013-09-05T15:01:30.324236 #18793] ERROR -- : worker=0 PID:19465 timeout (31s > 30s), killing
E, [2013-09-05T15:01:31.772286 #18793] ERROR -- : reaped #<Process::Status: pid 19465 SIGKILL (signal 9)> worker=0
I, [2013-09-05T15:02:44.082275 #4749]  INFO -- : worker=0 ready
D, [2013-09-05T15:11:15.166657 #32546] DEBUG -- : waiting 16.0s after suspend/hibernation
D, [2013-09-05T15:17:02.521340 #27458] DEBUG -- : waiting 16.0s after suspend/hibernation
D, [2013-09-05T16:20:33.844186 #9478] DEBUG -- : waiting 16.0s after suspend/hibernation
D, [2013-09-05T16:20:34.695776 #27014] DEBUG -- : waiting 16.0s after suspend/hibernation
D, [2013-09-05T16:40:36.166133 #18793] DEBUG -- : waiting 16.0s after suspend/hibernation
D, [2013-09-05T16:40:36.169696 #27014] DEBUG -- : waiting 16.0s after suspend/hibernation

Кто-нибудь может подсказать в каком направлении копать? Я уже исчерпал варианты. :(

Заранее спасибо.

Yury Korolev

unread,
Sep 5, 2013, 11:34:06 AM9/5/13
to ror...@googlegroups.com
а в конфигах-то что?
--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru
---
Вы получили это сообщение, поскольку подписаны на группу RubyOnRails to russian.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес ror2ru+un...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

Stanislav

unread,
Sep 5, 2013, 11:51:59 AM9/5/13
to ror...@googlegroups.com
А в конфигах вот такое безобразие:

upstream gamestockgfx.com{
  server unix:/home/deployer/gsg/current/tmp/gamestockgfx.socket fail_timeout=0;
}
server {
  listen 80 default;

  server_name gamestockgfx.com;
  root /home/deployer/gsg/current/public;

  access_log /home/deployer/gsg/current/log/nginx.access.log;
  error_log /home/deployer/gsg/current/log/nginx.error.log;
  rewrite_log on;

  location / {
      auth_basic "Restricted";
      auth_basic_user_file /home/deployer/gsg/current/public/.htpasswd;
   
    proxy_pass http://**.com;
    proxy_redirect off;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    client_max_body_size 10m;
    client_body_buffer_size 128k;

    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;

    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
  }

  # if the request is for a static resource, nginx should serve it directly
  # and add a far future expires header to it, making the browser
  # cache the resource and navigate faster over the website
 
  location ~ ^/(system|assets|spree)/  {
    root /home/deployer/gsg/current/public;
    expires max;
    break;

Yury Korolev

unread,
Sep 5, 2013, 12:13:53 PM9/5/13
to ror...@googlegroups.com
Еще бы unicorn кофниг.

Stanislav

unread,
Sep 5, 2013, 12:44:31 PM9/5/13
to ror...@googlegroups.com
ENV['RAILS_ENV'] = 'production'
worker_processes 1
preload_app true
user('deployer','staff')
timeout 30

@app = "/home/deployer/gsg/current"  # путь к нашему размещенному приложению
listen "#{@app}/tmp/gamestockgfx.socket"  # путь где будет лежать наш открытый сокет
working_directory "#{@app}"
pid "#{@app}/tmp/gamestockgfx.pid"  # ключ инстанса нашего запущенного сервера
stderr_path "#{@app}/log/unicorn.stderr.log"  # пути к логам unicorn'а
stdout_path "#{@app}/log/unicorn.stdout.log"

GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exists?(old_pid) && server.pid != old_pid
    begin
      Process.kill("QUIT", File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|
  Rails.cache.reset if Rails.cache.respond_to? :reset
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end

Yury Korolev

unread,
Sep 5, 2013, 12:50:16 PM9/5/13
to ror...@googlegroups.com
1 worker это как-то не серьезно. Скорее всего при мало-майской нагрузке у вас все упирается в один воркер.

и таймауты лучше сделать поближе к друг другу

90 в nginx и всего 30 в unicorn

Max Lapshin

unread,
Sep 5, 2013, 3:11:44 PM9/5/13
to RubyOnRails to russian
Надо запустить юникорн не в фоновом режиме, а в foreground. Это поможет.


Stanislav

unread,
Sep 7, 2013, 3:45:59 AM9/7/13
to ror...@googlegroups.com
Спасибо Юре, вроде ситуация стабилизовалась. Напишу лоад тесты - посмотрю сколько выдержит с новыми настройками))

>Надо запустить юникорн не в фоновом режиме, а в foreground. Это поможет.
А не могли бы вы указать в доках где про это написано? а то обычскался, но ничего не нашел

Всем спасибо!


2013/9/6 Max Lapshin <max.l...@gmail.com>
Надо запустить юникорн не в фоновом режиме, а в foreground. Это поможет.


--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru
---
Вы получили это сообщение, так как подписаны на группу "RubyOnRails to russian".
Чтобы отказаться от подписки на эту тему, перейдите на страницу https://groups.google.com/d/topic/ror2ru/RDz2necqqHY/unsubscribe.
Чтобы отказаться от подписки на эту группу и все входящие в нее темы, отправьте электронное письмо на адрес ror2ru+un...@googlegroups.com.

Renat Ibragimov

unread,
Sep 7, 2013, 1:00:33 PM9/7/13
to ror...@googlegroups.com
ну это Макс тебе советует в консольке запустить без -D директивы типа.
Но в целом кол-во worker'ов должно спасти.

суббота, 7 сентября 2013 г., 14:45:59 UTC+7 пользователь Stanislav написал:
Reply all
Reply to author
Forward
0 new messages