能否在Passenger Rails应用中优雅重启单个进程?
Passenger 单个进程重启与轮询重启配置方案
手动重启单个进程
- 先运行
passenger-status查看当前应用的所有进程,找到要重启的进程PID - 执行
passenger-config restart-app /path/to/your/app --pid=目标PID,替换实际的应用路径和进程PID,就能单独重启该进程,不影响其他进程运行
配置自动轮询重启(适配内存泄漏排查场景)
按请求数触发
在Apache的配置文件(比如虚拟主机配置或httpd.conf)里添加:
PassengerMaxRequests 10000
每个进程处理满10000个请求后会自动优雅重启,新请求会分配给其他正常进程,实现逐步替换。
按内存阈值触发
添加以下配置,当进程内存超过设定值时自动重启:
PassengerMemoryLimit 1024
这里的1024单位是MB,可根据你的应用内存使用情况调整。
按闲置时间触发
如果应用有周期性闲置时段,可以设置:
PassengerPoolIdleTime 3600
进程闲置超过3600秒(1小时)就会自动关闭,新请求进来时会启动新进程,间接完成旧进程的替换。
滚动重启所有进程(优雅不中断)
如果需要逐步替换所有进程但不想一次性重启整个应用,直接运行:
passenger-config restart-app /path/to/your/app --rolling-restart
这个命令会逐个重启进程,保证始终有可用进程处理请求,非常适合排查内存泄漏时逐步更新进程。
注意事项
- 修改Apache配置后,执行
apachectl graceful让配置生效,无需强制重启整个Apache服务 - 排查内存泄漏期间,可以用
passenger-memory-stats持续监控各进程的内存占用情况,配合单个进程重启来定位问题
内容的提问来源于stack exchange,提问作者user1130176
相关产品推荐
相关产品推荐

