mongod的首次启动启动了多个mongod进程

时间:2015-03-27 21:38:02

标签: linux mongodb

给定一个干净的mongo数据目录,我运行这样的启动脚本(我意识到我可以使用service,但这是一个不同的问题,我使用这个脚本作为解决方法):

>$ cat startMongo.sh
nohup sudo mongod --rest --fork --config /etc/mongod.conf > logs/mongo.log 2>&1 &

问题在于这会以某种方式启动大量流程:

>$ ps -efw | grep mongo
root      7038     1  0 21:29 pts/0    00:00:00 sudo mongod --rest --fork --config /etc/mongod.conf
root      7039  7038  0 21:29 pts/0    00:00:00 mongod --rest --fork --config /etc/mongod.conf
root      7040  7039  0 21:29 ?        00:00:00 mongod --rest --fork --config /etc/mongod.conf
root      7041  7040 10 21:29 ?        00:00:01 mongod --rest --fork --config /etc/mongod.conf

认为这种情况正在发生,而Mongo会做一些预分配,我可以在日志文件中看到。过了一会儿,确实消失了:

>$ ps -efw | grep mongo
root      7041     1  4 21:29 ?        00:00:01 mongod --rest --fork --config /etc/mongod.conf

我的问题是这个是否应该发生?我在Windows中尝试过相同的操作,但没有看到问题。我确信直到最近才在Ubuntu中出现(我从2.6升级到3)。

1 个答案:

答案 0 :(得分:1)

我试图运行mongod --fork,我得到了:

about to fork child process, waiting until server is ready for connections.

我想这意味着主进程在实际分支到最终侦听器porcess之前会做一些事情,而这些东西可以分配日志文件。我还获得了您描述的多进程状态。

我在没有--fork的情况下尝试了相同的命令,并且没有额外的过程。

所以你认为是正确的,额外产生的mongod用于预分配,但仅限于--fork模式。

无论如何,此时使用nohup是没用的,因为如果你用--fork运行mongo,你也会将它发送到后台模式:你的nohup日志只记录如下内容:

about to fork child process, waiting until server is ready for connections. 
forked process: 7306 
child process started successfully, parent exiting