0

私は3つのシンプロセスを起動していますbundle exec thin start -C /etc/thin/staging.yml

私は rvm を使用しており、ruby のバージョンは ree-1.8.7 です。

の内容/etc/thin/staging.yml:

---                                                             
timeout: 30                                                     
pid: /home/myuser/apps/g/shared/pids/thin.pid           
max_persistent_conns: 512                                       
servers: 3                                                      
chdir: /home/myuser/apps/g/current                      
port: 3040                                                      
require: []                                                     

log: /home/myuser/apps/g/shared/log/thin.log            
daemonize: true                                                 
address: 0.0.0.0                                                
max_conns: 1024                                                 
wait: 30                                                        
environment: staging                                            

lsof -i :3040-3042ポート 3040 ~ 3042 でリッスンしている 3 つの Ruby プロセスが表示されますが、pid ファイルには 3 つの異なる (わずかに低い) pid が含まれています。6 つのプロセスすべてが呼び出されます。merb : merb : Master

でthin を停止するとbundle exec thin stop -C /etc/thin/staging.yml、最初に pid ファイル内のプロセスに QUIT シグナルが送信され、タイムアウト後に KILL シグナルが送信されます。

pid ファイルは削除され、シン ログはサーバーが停止したことを示していますが、ポート 3040 ~ 3042 でリッスンしている 3 つの Ruby プロセスがまだ存在するため、後続のプロセスthin startは失敗します。

両方のプロセスの出力の唯一の違いlsof -pは、/lib/libnss_files-2.12.so ライブラリと postgres ソケットです。

私の質問は次のとおりです。

  • 中にタイムアウトが発生するのはなぜthin stopですか?
  • サーバーごとに 1 つではなく 2 つのプロセスがあるのはなぜですか?
  • これをエレガントに修正するにはどうすればよいですか(kill -9なし)
4

1 に答える 1

0

どうやら Merb ブートローダーがフォークを行うようです。それはなんと頭がおかしいのでしょう。

に設定Merb::Config[:fork_for_class_load] = falseしますconfig.ru

于 2012-04-26T08:28:59.390 に答える