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