我正在启动三个瘦进程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)