6

Запуск довольно значительные рельсы приложение, мы недавно удосужился модернизировать его к рельсам 3.ошибки сегментации при работе с рельсов на рубин 1.9.3

Наш стек рубин-1.9.3p484, рельсы 3.2.16 и пассажир 4.0.23, работающий поверх apache.

После того, как вы набросились на несколько наших машин, мы начали замечать несколько действительно странных ошибок.

Такие вещи, как случайные методы, не определяемые объектами, которые, очевидно, имели бы их, переменные экземпляра были бы ноль внутри AR-ассоциаций и объекты, которые случайно заменяются на «false». Просто вокруг странного поведения.

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

Иногда это был бы просто узел Ruby, который передавался как null, в противном случае это была бы просто некоторая случайная переполненная строка, просто случайные вещи, искалеченные.

Ничего из этого не произошло во время тестирования, поэтому единственным «надежным» способом воспроизвести это до сих пор было просто бросить трафик на соответствующих машинах и посмотреть, когда/если они начнут демонстрировать это поведение.

Пройдя через все это, вот список вещей, которые мы исключали до сих пор: сбор OOB мусора

  • пассажира
  • рельсы 3 себя (по-видимому, мы бы получали их перед также, но они были достаточно далеко друг от друга, чтобы не вызывать никаких аварийных сигналов)
  • сериализация/перемещение вещей в и из memcached
  • libxml - появились сообщения о версии 2.5.0, вызывающие повреждение памяти, обновление до 2.7 .0 на самом деле ничего не изменилось
  • выключая Предварительное связывание (это может привести к повреждению памяти, в https://www.ruby-forum.com/topic/205897)

Возврат параметров ГХ запаса, кажется, облегчило проблему, но мы на самом деле не имеют ничего убедительного в этом отношении. Казалось бы, что больше сборов приводит к более низкой частоте возникновения проблемы.

Любые мысли о том, что может быть причиной этого или мы можем использовать, чтобы помочь нам определить проблему?

+1

Попробуйте Nginx и Unicorn и посмотрите, есть ли у вас проблемы. Я хорошо пользовался Пассажиром и не знал источника проблем, которые у меня были на производстве (до тех пор, пока я не избавился от Пассажира) – Abdo

+0

@ Абдо да, похоже, что это было и для нас. Так странно. – zmack

+0

Yup ..Я никогда не был счастливее, так как я сделал переключатель :-) – Abdo

ответ

1

У меня было 1.9.3-p484 segfault at_exit на тестовых прогонах, но я еще не изучил его. В моем случае это похоже на определенные зависимости для набора тестов.

Мы также были проблемы с другим проектом на Rails 3, что в конечном итоге отказаться от своего порта в Rails 3 и приклеить с 2.3):

вы пробовали запустить приложение вне Apache/Passenger?

+0

Да, просто готовился к обновлению. По какой-то непонятной причине исправление для нас закончилось тем, что он работал под единорогом. Все еще не уверен, как именно это повлияет на это, но там вы идете. – zmack

+0

Ну, есть ряд причин (: Например: http://blog.phusion.nl/2012/05/09/how-to-fix-the-ruby-1-9-httpsbundler-segmentation-fault- на ос-х-лев / –