Несколько дней назад на всех 4 моих серверах приложений начались проблемы. Это произошло после того, как я развернул некоторый код, но все, что я сделал, это обновил файл локальной базы данных, в котором хранятся некоторые IP-адреса, поэтому я не вносил никаких фактических изменений в код. Похоже, что примерно в то время мои процессы Ruby выходят из-под контроля. Некоторое время они будут в порядке, а затем внезапно быстро поднимутся до 100% ЦП на одном ЦП. Поскольку я использую пассажира, в конечном итоге другой поток будет делать то же самое и максимизировать другой ЦП, и так далее и так далее, пока веб-сервер не перестанет обрабатывать трафик и не перестанет отвечать.
Я много копал (что у меня не очень хорошо получается), но я, по крайней мере, обнаружил, что при запуске strace для процессов они выглядят довольно нормально для запуска, а затем, когда они сходят с ума, как описано выше, это просто непрерывный поток clock_gettime(CLOCK_REALTIME, {1518938625, 9566131}) = 0
звонки. Обычный процесс, как я уже сказал, не постоянно выплевывает вещи, только когда, например, поступает веб-запрос, но затем что-то его запускает, и он просто сходит с ума, пока я не убью процесс, не перезапущу пассажира или не перезагрузу сервер. Затем в течение часа или двух снова возникают проблемы.
Я занимаюсь этим пару дней, присматривая за детьми, безостановочно перезагружая вещи, чтобы они продолжали хромать, но я отчаянно нуждаюсь в некоторых идеях. Я заметил пару действительно старых сообщений примерно из 2013 года, в которых говорится о 100% проблеме с процессором с этой штукой clock_gettime, и я попробовал оба предложения, которые связаны с несколькими сообщениями, которые я видел. Один устанавливает переменную TZ, а другой должен исправить какую-то ошибку в секундах. Я не понимаю причин предложенных исправлений, но, к сожалению, они не сработали.
Я использую следующий стек: ruby 2.2.0 Passenger standalone: Gem Version: 4.0.58 (и пробовал обновиться до 5.2.0 на одном сервере без изменений в поведении) MySQL CentOS 6.9