为什么在Linux上会出现“mongod死亡但子系统被锁定”和“日志文件的可用空间不足”的错误?

68

我在Linux CentOS服务器上安装了mongo-10gen mongo-10gen-server

我按照链接中的步骤进行操作。

我已配置好/etc/mongod.conf -

logpath=/var/log/mongo/mongod.log
port=27017
dbpath=/var/lib/mongo

我已经在 iptables 中设置了Mongo的27017端口。 要启动Mongo,我使用了以下命令 -

service mongod start and
mongo

一开始运行得很好,但几天后我收到了以下错误信息 -

Tue Jan 29 08:41:54 [initandlisten] ERROR: Insufficient free space for journal files
Tue Jan 29 08:41:54 [initandlisten] Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles
Tue Jan 29 08:41:54 [initandlisten]
Tue Jan 29 08:41:54 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating
Tue Jan 29 08:41:54 dbexit:
Tue Jan 29 08:41:54 [initandlisten] shutdown: going to close listening sockets...
Tue Jan 29 08:41:54 [initandlisten] shutdown: going to flush diaglog...
Tue Jan 29 08:41:54 [initandlisten] shutdown: going to close sockets...
Tue Jan 29 08:41:54 [initandlisten] shutdown: waiting for fs preallocator...
Tue Jan 29 08:41:54 [initandlisten] shutdown: lock for final commit...
Tue Jan 29 08:41:54 [initandlisten] shutdown: final commit...
Tue Jan 29 08:41:54 [initandlisten] shutdown: closing all files...
Tue Jan 29 08:41:54 [initandlisten] closeAllFiles() finished
Tue Jan 29 08:41:54 [initandlisten] journalCleanup...
Tue Jan 29 08:41:54 [initandlisten] removeJournalFiles
Tue Jan 29 08:41:54 [initandlisten] shutdown: removing fs lock...
Tue Jan 29 08:41:54 dbexit: really exiting now

当我执行这个命令 -

service mongod status

它会报错 -

mongod dead but subsys locked
请帮我解决 mongod dead but subsys lockedInsufficient free space for journals, terminating 这两个问题。

9
它告诉你没有足够的可用磁盘空间来创建所需的3.3GB /var/lib/mongo/journal 文件,因此无法启动。 - JohnnyHK
我有足够的空间,但仍然遇到了问题。我在下面发布了对我有用的解决方法。 - user3270763
7个回答

88

您可以在运行mongod --config mongod.conf时的配置文件中添加以下内容:

对于MongoDB 3.x(最新版本)

storage:
   mmapv1:
      smallFiles: true

对于版本2.6+

storage:
   smallFiles: true

对于版本2.4及以下

smallfiles = true

然后只需执行mongod以接受您的配置文件(这里假设配置文件位于/etc/mongodb.conf):

mongod -f /etc/mongodb.conf

小文件参数的文档

Set to true to modify MongoDB to use a smaller default data file size. 
Specifically, smallfiles reduces the initial size for data files and
limits them to 512 megabytes. The smallfiles setting also reduces the
size of each journal files from 1 gigabyte to 128 megabytes.

@Andrei Karpushonak 配置文件在哪里?以设置 samllfiles = true - Labanino
根据您的操作系统,在Linux上它是 /etc/mongodb.conf。 - Andrei Karpushonak
解析INI配置文件错误:在“storage:”中无法识别行 请尝试“mongod --help”获取更多信息 - Thoman
2
我正在运行3.0.2版本,以上配置引发了一个错误,所以我不得不使用“smallfiles=true”才能使它正常工作。 - Rakesh Sankar
磁盘空间不足,无法创建 /var/lib/mongo/journal 文件,需要 => 3.3GB <= 的空间。 - Rémi Becheras
奇怪..对我来说,当我的mongodb v3.0.15时,2.6+的设置起作用了。 - Swapnil Sawant

55

使用以下命令启动 mongod 实例

mongod --dbpath /data/db --smallfiles

1
磁盘空间不足,无法创建 /var/lib/mongo/journal 文件,需要 => 3.3GB <= 的空间。 - Rémi Becheras

11

我正在按照http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/上的官方指南操作。

在使用后

$sudo service mongod start

我去查看了这个日志,以确认MongoDB是否已经成功启动:

/var/log/mongodb/mongod.log

这是我发现的问题:

2014-11-11T12:54:05.808-0500 [initandlisten] ERROR: Insufficient free space for journal files
2014-11-11T12:54:05.808-0500 [initandlisten] Please make at least 3379MB available in /var/lib/mongodb/journal or use --smallfiles
2014-11-11T12:54:05.808-0500 [initandlisten]
2014-11-11T12:54:05.808-0500 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating
2014-11-11T12:54:05.808-0500 [initandlisten] dbexit:
2014-11-11T12:54:05.808-0500 [initandlisten] shutdown: going to close listening sockets...
2014-11-11T12:54:05.808-0500 [initandlisten] shutdown: going to flush diaglog...
2014-11-11T12:54:05.808-0500 [initandlisten] shutdown: going to close sockets...
2014-11-11T12:54:05.808-0500 [initandlisten] shutdown: waiting for fs preallocator...
2014-11-11T12:54:05.808-0500 [initandlisten] shutdown: lock for final commit...
2014-11-11T12:54:05.808-0500 [initandlisten] shutdown: final commit...
2014-11-11T12:54:05.808-0500 [initandlisten] shutdown: closing all files...
2014-11-11T12:54:05.808-0500 [initandlisten] closeAllFiles() finished
2014-11-11T12:54:05.808-0500 [initandlisten] journalCleanup...
2014-11-11T12:54:05.808-0500 [initandlisten] removeJournalFiles
2014-11-11T12:54:05.814-0500 [initandlisten] shutdown: removing fs lock...
2014-11-11T12:54:05.814-0500 [initandlisten] dbexit: really exiting now

解决方案:

在文件/etc/mongod.conf的末尾添加以下行:

smallfiles = true

之后,我重新启动了mongod服务:

$sudo service mongod restart

然后当我查看日志时,我意识到一切都是完美的,问题已经解决:

2014-11-11T22:32:20.544-0500 ***** SERVER RESTARTED *****
2014-11-11T22:32:20.552-0500 [initandlisten] MongoDB starting : pid=5200 port=27017 dbpath=/var/lib/mongodb 64-bit host=jaimemontoya-VirtualBox
2014-11-11T22:32:20.552-0500 [initandlisten] db version v2.6.5
2014-11-11T22:32:20.552-0500 [initandlisten] git version: e99d4fcb4279c0279796f237aa92fe3b64560bf6
2014-11-11T22:32:20.552-0500 [initandlisten] build info: Linux build8.nj1.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
2014-11-11T22:32:20.552-0500 [initandlisten] allocator: tcmalloc
2014-11-11T22:32:20.552-0500 [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1" }, storage: { dbPath: "/var/lib/mongodb", smallFiles: true }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2014-11-11T22:32:20.564-0500 [initandlisten] journal dir=/var/lib/mongodb/journal
2014-11-11T22:32:20.564-0500 [initandlisten] recover : no journal files present, no recovery needed
2014-11-11T22:32:20.738-0500 [initandlisten] waiting for connections on port 27017
2014-11-11T22:33:20.748-0500 [clientcursormon] mem (MB) res:36 virt:245
2014-11-11T22:33:20.748-0500 [clientcursormon]  mapped (incl journal view):64
2014-11-11T22:33:20.748-0500 [clientcursormon]  connections:0

1
磁盘空间不足,无法创建 /var/lib/mongo/journal 文件。所需空间为 => 3.3GB <=。 - Rémi Becheras
在我的系统上,要编辑的文件是 /etc/mongodb.conf 而不是 /etc/mongod.conf - jtlindsey

1

对于那些尽管有足够的空间来创建日志文件,但仍然遇到此问题的人。

我的问题是:我有足够的空间来创建日志文件。Mongo给了我一个连接失败的问题。我使用kill命令杀掉了mongod进程,这反过来又给了我subsys问题。以下是对我有效的解决方法:

前往/var/lock/subsys并删除文件mongod

现在运行service mongod stop,然后运行service mongod start

现在开始运行mongo shell,一切似乎都正常运行。


0

仅仅是一条提示,对我很有帮助。虽然与Mongo相关的技术问题并不存在,但系统空间不足。清除系统缓存对我很有帮助,Mongo也恢复了正常运行。

yum clean all

0

第一

cd /usr/local/src/mongo/bin/<br>

那么

./mongod --dbpath /usr/local/src/mongo/data/db/ --smallfiles

3
这可能解决问题,但如果你能在回答中加入一些解释就更好了。这将增加你回答的价值。 - Amit

0
问题背景:我将 DB 服务器从 t2.micro 升级到更大的实例,但是没有停止数据库服务。导致创建了此锁文件并抛出以下错误, mongod dead but subsys locked 之后,我无法使用 mongo shell。
如果您有足够的磁盘空间,请按照以下步骤操作:
1. sudo mongod (如果您发现下面的失败原因)
Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted)
  1. 前往/tmp/目录

  2. 删除mongodb-27017.sock文件

  3. 使用sudo service mongod restart命令重新启动mongod


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接