Частый SystemExit в Ruby при выполнении HTTP-вызовов

StackOverflow https://stackoverflow.com/questions/514

  •  08-06-2019
  •  | 
  •  

Вопрос

У меня есть веб-сайт Ruby on Rails, который выполняет HTTP-вызовы к внешней веб-службе.

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

Ruby — это версия 1.8.6, а Rails — версия 1.2.6.

У кого-то еще есть такая проблема?

Это ошибка и трассировка стека.

SystemExit произошел/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/fcgi_handler.rb:116:in exit '/usr/local/lib/ruby/gems/1.8/gems/ Rails-1.2.6/lib/fcgi_handler.rb: 116: in exit_now_handler '/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/inflector.rb:250:in to_proc '/usr/local/lib/ruby/1.8/net/protocol.rb:133:IN Call' /usr/local/lib/ruby/1.8/net/protocol.rb:133:in sysread '/usr/local/ lib/ruby/1.8/net/protocol.rb: 133: in rbuf_fill '/usr/local/lib/ruby/1.8/timeout.rb:56:in Timeout' /usr/local/lib/ruby/1.8/timeout. RB: 76: в Timeout '/usr/local/lib/ruby/1.8/net/protocol.rb:132:IN rbuf_fill'/usr/local/lib/ruby/1.8/net/protocol.rb:116:in redhtuntil '/usr/local/lib/ruby/1.8/net/protocol.rb:126:in readline' /usr/local/lib/ruby/1.8/net/http.rb:2017:in read_status_line '/usr/loc lib/ruby/1.8/net/http.rb: 2006: in read_new '/usr/local/lib/ruby/1.8/net/http.rb:1047:in запрос'/susr/local/lib/ruby/1.8/ net/http.rb: 945: in en request_get '/usr/local/lib/ruby/1.8/net/http.rb:380:in get_response' /usr/local/lib/ruby/1.8/net/http.rb: 543: В Start '/usr/local/lib/ruby/1.8/net/http.rb:379:in get_response'

Это было полезно?

Решение

Известно, что использование fcgi с Ruby приводит к большим ошибкам.

Практически все переехали дворняга по этой причине, и я рекомендую вам сделать то же самое.

Другие советы

Прошло некоторое время с тех пор, как я использовал FCGI, но я думаю, что процесс FCGI может выдать SystemExit, если поток занимает слишком много времени.Это может быть веб-служба, которая не отвечает, или даже медленный DNS-запрос.Некоторые результаты Google показывают аналогичную ошибку с Python и FCGI, поэтому хорошей идеей было бы перейти на mongrel. Эта почта это мой справочник, который я использовал для настройки дворняги и до сих пор возвращаюсь к нему.

Раньше я все время получал их на Apache1/fastcgi.Я думаю, это вызвано тем, что fastcgi зависает до того, как Ruby закончит работу.

Переход на дворнягу — хороший первый шаг, но еще многое предстоит сделать.Плохая идея отбирать веб-сервисы на живых страницах, особенно из Rails.Rails не является потокобезопасным.Количество одновременных соединений, которые вы можете поддерживать, равно количеству дворняг (или процессов-пассажиров) в вашем кластере.

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

Все, что может быть непредсказуемо медленным, должно происходить в очереди заданий.Первое обращение к /slow/action добавляет задание в очередь, и /slow/action продолжает обновляться посредством обновления страниц или запросов через ajax до тех пор, пока задание не будет завершено, а затем вы получите результаты из очереди заданий.В настоящее время существует несколько очередей заданий для Rails, но самая старая и, вероятно, наиболее широко используемая — это ФонRB.

Другая альтернатива, в зависимости от характера вашего приложения, — отбирать службу каждые N минут через cron, кэшировать данные локально и читать вашу действующую страницу из кеша.

я бы тоже посмотрел Пассажир.Приступить к работе намного проще, чем традиционное решение Apache/nginx + Mongrel.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top