我正在尝试追踪 Rails 网站上的一个错误,我注意到有一些重复的 Ruby 进程占用了 CPU 并且不会消失。我想找出是什么启动了它们以及如何停止它们或为它们提供完成工作所需的资源。
背景:服务器是Ubuntu 10.04 LTS。Ruby是1.9.2-p290。该网站是Rails 3.1.4,Passenger 3.0.9在Nginx 1.0.8上。
站点代码由名为 的非 wheel 用户部署和拥有site-runner
,因此 Passenger 进程应以该用户身份运行。该用户没有 crontab 文件。
这让我很怀疑:
顶部 - 13:41:05 启动 73 天,20:26,2 个用户,平均负载:2.11、2.06、2.28 内存:总计 508272k,已用 295660k,可用 212612k,缓冲区 12608k 交换:总计 1048572k,已使用 32020k,可用 1016552k,缓存 42580k PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令 26911 站点运行 20 0 227m 116m 2656 R 101 23.4 18:08.55 红宝石 26919 站点运行 20 0 227m 116m 2656 R 100 23.4 18:08.50 红宝石 [...]
我想确认这不是乘客,所以我使用了pstree
:
$ pstree-apu 初始化,1 |-PassengerWatchd,17903 | |-乘客助手,17908 | | |-ruby,17912 ... | | | |-{红宝石},17938 | | | `-{ruby},26888 | | |-{乘客帮助},17913 [崩溃了一大堆 Passenger 进程] | | `-{PassengerHelpe},17926 | |-PassengerLoggin,17915,无人 | | `-{PassengerLoggi},17928 | |-{乘客观察},17907 | |-{乘客观察},17929 | `-{PassengerWatch},17930 |-cron,2331 |-getty,7533 -8 38400 tty1 |-主人,2536 | |-pickup,26864,postfix -l -t fifo -u -c | |-qmgr,2543,后缀-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,系统日志-c4 | |-{rsyslogd},2303 |`-{rsyslogd},2304 |-ruby,26911,站点运行者 ... |`-{ruby},26913 |-ruby,26919,站点运行者 ... |`-{ruby},26921 |-sshd,2329 |`-sshd,27099 |`-sshd,27110,帕克 |`-bash,27111 |`-pstree,27218-apu |-udevd,2108 --守护进程 ||-udevd,2139 --守护进程 |`-udevd,2142 --daemon `-upstart-udev-br,2066 --daemon
...还有那些 ruby 进程,26911 和 26919,不是 Nginx 或 Passenger 的子进程。
我已经终止了这些进程,但它们又重新启动了。
我如何才能弄清楚这些进程正在做什么并促使它们完成或让它们离开并远离?
答案1
在 中top
,您可以通过按“c”键来切换完整命令的显示。
如果您没有使用,您也可以使用一些选项top
获取完整命令:ps
ps -fp 26911
因此,“f”表示完整命令,“p”表示指定您感兴趣的进程 ID。
您还可以查看 Linux 上的 proc 文件系统。 cat /proc/26911/cmdline
将显示用于进程 26911 的命令行。