Назад | Перейти на главную страницу

Загадочные процессы Ruby на сервере Rails

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

Справочная информация: Сервер - Ubuntu 10.04 LTS. Ruby - это 1.9.2-p290. Сайт - Rails 3.1.4, а Passenger 3.0.9 - на Nginx 1.0.8.

Код сайта развернут и принадлежит пользователю без колеса с именем site-runner, поэтому процессы Passenger должны выполняться от имени этого пользователя. У этого пользователя нет файла crontab.

Вот что вызывает у меня подозрения:

top - 13:41:05 up 73 days, 20:26,  2 users,  load average: 2.11, 2.06, 2.28
Mem:    508272k total,   295660k used,   212612k free,    12608k buffers
Swap:  1048572k total,    32020k used,  1016552k free,    42580k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
26911 site-run  20   0  227m 116m 2656 R  101 23.4  18:08.55 ruby          
26919 site-run  20   0  227m 116m 2656 R  100 23.4  18:08.50 ruby  
[...]

Я хотел подтвердить, что это не Пассажир, поэтому использовал pstree:

$ pstree -apu
init,1
  |-PassengerWatchd,17903
  |   |-PassengerHelper,17908
  |   |   |-ruby,17912                                                ...
  |   |   |   |-{ruby},17938
  |   |   |   `-{ruby},26888
  |   |   |-{PassengerHelpe},17913
[Collapsed a bunch of Passenger processes]
  |   |   `-{PassengerHelpe},17926
  |   |-PassengerLoggin,17915,nobody
  |   |   `-{PassengerLoggi},17928
  |   |-{PassengerWatch},17907
  |   |-{PassengerWatch},17929
  |   `-{PassengerWatch},17930
  |-cron,2331
  |-getty,7533 -8 38400 tty1
  |-master,2536
  |   |-pickup,26864,postfix -l -t fifo -u -c
  |   |-qmgr,2543,postfix -l -t fifo -u
  |   `-tlsmgr,19889,postfix -l -t unix -u -c
  |-mysqld,23916,mysql
  |   |-{mysqld},23922
[collapsed a bunch of mysql processes]
  |   `-{mysqld},15541
  |-nginx,17931
  |   `-nginx,17932,site-runner      
  |-rsyslogd,2297,syslog -c4
  |   |-{rsyslogd},2303
  |   `-{rsyslogd},2304
  |-ruby,26911,site-runner                                      ...
  |   `-{ruby},26913
  |-ruby,26919,site-runner                                      ...
  |   `-{ruby},26921
  |-sshd,2329
  |   `-sshd,27099
  |       `-sshd,27110,parker
  |           `-bash,27111
  |               `-pstree,27218 -apu
  |-udevd,2108 --daemon
  |   |-udevd,2139 --daemon
  |   `-udevd,2142 --daemon
  `-upstart-udev-br,2066 --daemon

... и есть эти рубиновые процессы, 26911 и 26919, а не дочерние процессы Nginx или Passenger.

Я убил процессы, но они перезапускаются.

Как мне понять, что делают эти процессы, и либо побудить их завершить, либо уйти и держаться подальше?

В top, вы можете переключить отображение полной команды, нажав клавишу «c».

Если ты вне top, вы также можете получить полную команду, используя некоторые ps параметры:

ps -fp 26911

Итак, «f» для полной команды и «p» для указания идентификатора процесса, который вас интересует.

Вы также можете посмотреть файловую систему proc в Linux. cat /proc/26911/cmdline покажет командную строку, используемую для процесса 26911.