web-dev-qa-db-ja.com

不思議なRubyプロセスRailsサーバー

Railsサイトでバグを追跡しようとしていますが、CPUを占有して実行されないRubyプロセスが繰り返し発生していることに気付きました。何が彼らを始めているのか、そして彼らを止める方法、または彼らが完了して彼らの仕事を成し遂げるために必要なリソースを彼らに与える方法を議論したいと思います。

背景:サーバーはUbuntu 10.04LTSです。 Rubyは1.9.2-p290です。サイトはRails 3.1.4で、Passenger3.0.9はNginx1.0.8にあります。

サイトコードは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ユーザーPRNI VIRT RES SHR S%CPU%MEM TIME +コマンド
 26911サイト実行20 0 227m 116m 2656 R 101 23.4 18:08.55 Ruby 
 26919サイト実行200 227m 116m 2656 R 100 23.4 18:08.50 Ruby = 
 [...] 

これが乗客ではないことを確認したかったので、pstreeを使用しました。

 $ pstree -apu 
 init、1 
 | -PassengerWatchd、17903 
 | | -PassengerHelper、17908 
 | | | -Ruby、17912 ... 
 | | | |-{ルビー}、17938 
 | | | `-{ルビー}、26888 
 | | |-{PassengerHelpe}、17913 
 [一連のPassengerプロセスを折りたたんだ] 
 | | `-{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 
 [一連のmysqlプロセスが折りたたまれました] 
 | `-{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 

...そしてそれらのRubyプロセス、26911および26919があり、NginxまたはPassengerの子ではありません。

プロセスを強制終了しましたが、再起動します。

これらのプロセスが何をしているのかを理解し、完了するように促すか、離れて離れるようにするにはどうすればよいですか?

2
pjmorse

topでは、「c」キーを押すことにより、コマンド全体の表示を切り替えることができます。

topが不足している場合は、いくつかのpsオプションを使用して完全なコマンドを取得することもできます。

ps -fp 26911

したがって、完全なコマンドの場合は「f」、関心のあるプロセスIDを指定する場合は「p」です。

Linuxのprocファイルシステムも見ることができます。 cat /proc/26911/cmdlineは、プロセス26911に使用されるコマンドラインを表示します。

4
cjc