Я пытаюсь найти ошибку на сайте 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.