тонкий запускает два процесса ruby ​​на сервер, убивает не тот

Я запускаю три тонких процесса с 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 покажет три процесса ruby, прослушивающих порты 3040-3042, но файлы pid содержат три разных (чуть более низких) pid. Все шесть процессов называются merb : merb : Master

Когда я останавливаю тонкий с помощью bundle exec thin stop -C /etc/thin/staging.yml, тонкий сначала отправляет сигнал QUIT процессам в файлах pid, а затем, после тайм-аута, сигнал KILL.

Файлы pid теперь исчезли, тонкие журналы показывают, что сервер остановился, но все еще есть три процесса ruby, прослушивающие порты 3040-3042, поэтому последующий thin start завершится ошибкой.

Единственное различие между выводом lsof -p обоих процессов — это библиотека /lib/libnss_files-2.12.so и сокет postgres.

Мои вопросы:

  • почему я получаю тайм-аут во время thin stop?
  • почему на сервере два процесса, а не один?
  • как мне это исправить элегантно (без kill -9)

person Michiel de Mare    schedule 25.04.2012    source источник


Ответы (1)


Судя по всему, загрузчик Merb делает форк. Как это безмозгло!

Установите Merb::Config[:fork_for_class_load] = false в config.ru.

person Michiel de Mare    schedule 26.04.2012