Rails服务器上的神秘Ruby进程

我试图追赶一个Rails网站上的错误,我注意到有反复的Ruby进程占用CPU,不会消失。 我想先说明一下他们是怎么开始的,以及如何阻止他们,或者给他们提供他们需要的资源来完成他们的工作。

背景:服务器是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文件。

这是什么让我怀疑:

顶部 -  13:41:05最多73天,20:26,2个用户,平均负载:2.11,2.06,2.28
 Mem:总计508272k,使用295660k,212612k免费,12608k缓冲
交换:总共1048572k,使用32020k,1016552k免费,42580kcaching

   PID用户PR NI VIRT RES SHR S%CPU%MEM时间+命令 
 26911现场运行20 0 227m 116m 2656 R 101 23.4 18:08.55ruby          
 26919现场运行20 0 227m 116m 2656 R 100 23.4 18:08.50ruby  
 [...]

我想确认这不是Passenger,所以我用pstree

 $ pstree -apu
初始化,1
   | -PassengerWatchd,17903
   |  | -PassengerHelper,17908
   |  |  | -ruby,17912 ...
   |  |  |  |  -  {}ruby,17938
   |  |  |  ` -  {}ruby,26888
   |  |  |  -  {} PassengerHelpe,17913
 [折叠了一大堆乘客stream程]
   |  |  ` -  {} PassengerHelpe,17926
   |  | -PassengerLoggin,17915,没有人
   |  |  ` -  {} PassengerLoggi,17928
   |  |  -  {} PassengerWatch,17907
   |  |  -  {} PassengerWatch,17929
   |  ` -  {} PassengerWatch,17930
   | -cron,2331
   | -getty,7533 -8 38400 tty1
   |  - 主,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
 [折叠了一堆mysql进程]
   |  ` -  {}的mysqld,15541
   | -nginx,17931
   |  `-nginx,17932,网站的领先者      
   | -rsyslogd,2297,syslog -c4
   |  |  -  {} rsyslogd,2303
   |  ` -  {} rsyslogd,2304
   |  - 鲁比,26911,网站运行...
   |  ` -  {}ruby,26913
   |  - 鲁比,26919,网站运行...
   |  ` -  {}ruby,26921
   | -sshd,2329
   |  `-sshd,27099
   |  `-sshd,27110,帕克
   |  `-bash,27111
   |  `-pstree,27218 -apu
   | -udevd,2108  - 守护进程
   |  | -udevd,2139  - 守护进程
   |  -udevd,2142  - 守护进程
   `-upstart-udev-br,2066  - 守护进程

…还有那些ruby进程,26911和26919,而不是Nginx或Passenger的孩子。

我杀了进程,但他们重新启动。

我怎么能弄清楚这些过程在做什么,要么促使他们完成,要么让他们离开,远离?

top ,您可以通过按“c”键来切换完整命令的显示。

如果你处于top ,你也可以使用一些ps选项来获得完整的命令:

ps -fp 26911

所以,“f”表示完整的命令,“p”表示你感兴趣的进程ID。

你也可以看看Linux上的proc文件系统。 cat /proc/26911/cmdline将显示用于进程26911的命令行。