CentOS7.4下Httpd+Passenger部署Ruby应用OOM不杀进程求助
解决Passenger默认oom_adj/oom_score_adj配置问题
我来帮你搞定这个Passenger OOM优先级的问题——这个场景我之前处理过好几次,其实Passenger本身就提供了官方配置项来调整OOM参数,不用手动去修改进程的数值,具体操作步骤如下:
首先先理清楚背景:CentOS 7 实际用的是oom_score_adj(取值范围-1000到1000),你看到的oom_adj=-17是旧版参数,对应oom_score_adj=-1000,也就是完全禁止OOM杀死该进程,这正是Passenger的默认设置,也是导致内存泄漏进程无法被清理的原因。
1. 修改Passenger配置文件
找到你的Passenger配置文件,通常是全局配置/etc/httpd/conf.d/passenger.conf,如果只需要针对特定站点调整,也可以修改对应虚拟主机的.conf文件(比如/etc/httpd/conf.d/your-app.conf)。
在配置文件中添加或修改以下指令:
PassengerOOMScoreAdjust 0
你可以根据需求调整这个数值:
- 设为
0和Httpd保持一致,让OOM管理器可以正常评估进程优先级 - 如果想让Passenger进程更容易被OOM杀死(比如内存泄漏时优先清理),可以设为正数(比如
500);想降低被杀死的概率则设为负数(但不要设为-1000)
2. 重启Httpd使配置生效
执行命令重启Httpd服务,让新配置生效:
systemctl restart httpd
3. 验证配置是否生效
先找到Passenger相关进程的PID:
ps aux | grep passenger
然后查看该进程的oom_score_adj值:
cat /proc/<你的Passenger进程PID>/oom_score_adj
如果输出是你设置的数值(比如0),说明配置已经成功生效。
额外补充
PassengerOOMScoreAdjust指令会覆盖Passenger默认的-1000设置,无论是Passenger核心进程还是它派生的Ruby应用进程,都会应用这个优先级- 如果你是用Passenger Standalone模式(而非和Httpd集成),启动时可以添加参数直接设置:
passenger start --oom-score-adjust 0
内容的提问来源于stack exchange,提问作者Shaun H
相关产品推荐
相关产品推荐

