0

我正在启动三个瘦进程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 上侦听的三个 ruby​​ 进程,但 pid 文件包含三个不同(略低)的 pid。所有六个进程都被调用merb : merb : Master

当我用 停止瘦时bundle exec thin stop -C /etc/thin/staging.yml,瘦首先向 pid 文件中的进程发送 QUIT 信号,然后在超时后发送 KILL 信号。

pid 文件现在消失了,精简日志显示服务器已停止,但仍有 3 个 ruby​​ 进程在侦听端口 3040-3042,因此后续thin start将失败。

两个进程的输出之间的唯一区别lsof -p是 /lib/libnss_files-2.12.so 库和 postgres 套接字。

我的问题是:

  • 为什么我会在 期间超时thin stop
  • 为什么每台服务器有两个进程而不是一个?
  • 我如何优雅地解决这个问题(不杀 -9)
4

1 回答 1

0

显然 Merb 引导程序做了一个分叉。这是多么的脑残!

设置Merb::Config[:fork_for_class_load] = false在您的config.ru.

于 2012-04-26T08:28:59.390 回答