Ubuntu 14.04.05 LTS下MongoDB进程ulimit值调整求助
解决MongoDB在Ubuntu 14.04上ulimit进程数不生效的问题
我之前在Ubuntu 14.04上部署MongoDB时也碰到过一模一样的ulimit限制不生效的问题,给你梳理几个关键的排查和解决步骤:
1. 确认PAM配置是否正确加载limits规则
Ubuntu的limits.conf配置依赖PAM模块生效,你需要检查两个关键文件:
/etc/pam.d/common-session/etc/pam.d/common-session-noninteractive
确保这两个文件里都包含一行:
session required pam_limits.so
如果没有的话,直接添加进去,之后重启服务器(或者重新登录root用户)让配置生效。
2. 针对systemd管理的MongoDB服务单独配置限制
如果你的MongoDB是用systemd启动的(Ubuntu 14.04部分版本默认用systemd),全局的limits.conf设置可能不会作用于系统服务。你需要修改MongoDB的service配置文件:
- 打开MongoDB的service文件,通常路径是
/lib/systemd/system/mongodb.service或者/etc/systemd/system/mongodb.service - 在
[Service]段落下添加以下配置:LimitNPROC=64000 LimitNOFILE=64000 LimitSIGPENDING=infinity - 重新加载systemd配置并重启MongoDB:
systemctl daemon-reload systemctl restart mongodb
3. 针对init.d启动的MongoDB服务添加ulimit设置
如果你的MongoDB是通过传统init.d脚本启动的,需要在启动脚本里直接设置ulimit:
- 打开
/etc/init.d/mongodb脚本 - 在
start()函数的开头部分添加以下命令:ulimit -u unlimited ulimit -n 64000 ulimit -i unlimited - 保存后重启MongoDB服务:
service mongodb restart
4. 验证限制是否生效
重启MongoDB后,你可以通过以下步骤确认设置是否生效:
- 找到MongoDB的进程ID:
ps aux | grep mongod - 查看该进程的实际限制:
检查输出中的cat /proc/<你的mongod进程ID>/limitsMax processes和Max open files是否符合你的预期(至少32000进程数和64000文件数)。
另外,还要注意检查/etc/security/limits.d/目录下的配置文件,这些文件的优先级比/etc/security/limits.conf高,如果有冲突的配置会覆盖你的设置。
内容的提问来源于stack exchange,提问作者hardc0der
相关产品推荐
相关产品推荐

