modrails - мошеннические рубиновые процессы, потребляющие 100% ресурсов процессора

У меня есть экземпляры ruby ​​из mod_rails, которые идут "жулик" - эти процессы больше не перечислены в статусе пассажира и используют 100% ЦП.

Кроме установки god/monit, чтобы убить экземпляр, кто-нибудь может дать мне несколько советов о том, как это предотвратить? Я не смог найти в журналах ничего, что могло бы помочь.

4 ответа

Если вы используете Linux, вы можете установить утилиту "strace", чтобы увидеть, что делает процесс Ruby, который потребляет весь процессор. Это даст вам хороший обзор низкого уровня. Он должен быть доступен в вашем менеджере пакетов. Тогда ты можешь:

$ sudo strace -p 22710
Process 22710 attached - interrupt to quit
...lots of stuff...
(press Ctrl+C)

Затем, если вы хотите остановить процесс посередине и вывести трассировку стека, вы можете следовать руководству по использованию GDB в Ruby по адресу http://eigenclass.org/hiki.rb?ruby+live+process+introspection, особенно делать:

gdb --pid=(ruby process)
session-ruby
stdout_redirect
(in other terminal) tail -f /tmp/ruby_debug.(pid)
eval "caller"

Вы также можете использовать гем ruby-debug для удаленного подключения к отладочным сокетам, которые вы открываете, как описано в http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger

Похоже, на Github также есть проект, связанный с отладкой экземпляров Passenger, который выглядит интересно, но в документации нет: http://github.com/ddollar/socket-debugger/tree/master

У меня был процесс ruby, связанный с Phusion Passenger, который потреблял много ресурсов процессора, хотя он должен был простаивать.

Проблема ушла после того, как я побежал

date -s "`date`"

как предложено в этой теме. (Это было на Debian Squeeze)

По-видимому, проблема была связана с високосной секундой и могла повлиять на многие другие приложения, такие как MySQL, Java и т. Д. Более подробная информация в этой теме на lklm.

Мы видели нечто похожее на это с очень длинными запущенными SQL-запросами.

MySQL убил бы запросы, потому что они превысили длительный предел выполнения, и поток никогда не понимал, что запрос был мертв.

Вы можете проверить журналы базы данных.

Это повторяющаяся проблема с пассажиром. Я видел эту проблему много раз, помогая людям, которые бегали с пассажирами по рельсам. У меня нет исправления, но вы можете попробовать это http://www.modrails.com/documentation/Users%20guide%20Apache.html

Другие вопросы по тегам