我试图追赶一个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的命令行。