MongoDB数据库Too Many Open Files问题

初次使用MongoDB数据库的时候,碰到过很多问题,尤其是Too Many Open Files这个问题非常常见,并且在实际使用中也碰到过好几次。其实解决方案也非常简单,主要是Linux限制了打开文件的最大数量。因此,只要提高这个数量限制就可以了。然而,打开文件句柄的数量毕竟是上限的,因此还是需要找到根源问题,并优化MongoDB的使用方式,尽量避免出现Too Many Open Files的问题。

数据库过多导致Too Many Open Files问题

在MongoDB中,每创建一个数据库都会默认创建一个打开一个文件句柄。所以切记在设计数据库的过程中,千万不要想当然。当时有个项目在设计MongoDB的数据存储方式时,按照城市划分不同的数据库,用户的数据按照所在城市保存。于是可爱的程序员按照业务方提供的城市列表在MongoDB中创建了巨量的数据库,然后MongoDB瞬间挂了。查看MongoDB的日志文件报Too Many Open Files错误。

解决方案:
因此我们使用以下命令暂时提高了Linux系统的文件句柄最大值。

ulimit -n 64000

重启了MongoDB以后删除了所有以城市名字创建的数据库。最后决定还是建立一个用户信息数据库,然后每一个用户字段包含一个城市ID。为了提高按照城市搜索用户信息的性能,我们讲城市ID,用户ID都创建了索引。

连接客户端过多导致Too Many Open Files问题

在Linux系统中,不仅仅打开文件算一个文件句柄,一个TCP连接也算是一个文件句柄。在高并发的情况下,如果有大量的访问连接,就只能通过提高系统文件数量的方法了。另外,也可以横向拓展MongoDB集群,均衡负载减轻单个MongoDB服务器的访问压力。另外在MongoDB的官方文档中给出了推荐的ulimit的设置,大家可以参考一下。这里推荐一篇关于ulimit讲的比较详细的文章,大家也可以参考。

Captain QR Code

扫码联系船长

发表回复

您的电子邮箱地址不会被公开。