主机内存耗尽导致mongodb内存性能严重下降#yyds干货盘点#
2022年1月4日,客户反馈其一套mongodb数据库做批量插入时,批量插入10000条数据时可以正常执行,但是批量删除数据100000条时就出现卡死的情况。进过排查,发现是主机内存耗尽导致mongodb数据库性能严重下降,调整过主机内存后批量删除100000条数据效率恢复正常。
一、问题现象
如图所示,批量插入10000条数据时大约需要130毫秒的时间。
批量删除100000条数据时大约需要10200毫秒的时间。
二、问题分析
客户配合提供的mongodb 服务器CPU使用情况如下,经过观察CPU使用没有明显的波动:
mongodb 服务器磁盘IO使用情况如下,操作系统shell执行iostat -xmt 2 1000发现,数据库服务器的磁盘基本没有IO压力,进一步排除磁盘IO过载的影响。
mongodb 服务器内存使用情况如下,通过监控观察,内存使用99%,并且swap空间使用了5%左右,如果主机开始使用换页空间,mongodb数据库的性能将严重下降:
通过主机top命令,观察主机上消耗内存的主要进程,发现主机内存一共32G,而mongod进程占用了近28G,并且换页空间swap已经使用了2G多,因此,可以判断是主机内存被mongod耗尽导致mongo数据库性能下降。
进一步排查mongod的配置文件,发现没有对mongo数据库做内存使用量的限制,因此可以判断:由于mongodb没有限制内存使用,较大业务情况下,主机内存被耗尽并使用2G多的换页空间,进一步导致mongo数据库性能下降。
三、问题处理
根据客户目前mongodb数据库占用内存量和主机内存总量情况,建议客户:
1. 在mongodb的配置文件中增加内存限制参数cacheSizeGB=16g;
2. 对主机内存进行扩容,扩容到40G以上
最终,客户将主机内存调整到48G,mongodb数据库在10万条的批量处理下效率恢复正常。
四、问题总结
mongodb数据库比较特别,是服务器上消耗内存的大户,不做内存限制的情况下,会耗尽主机内存,严重情况导致主机重启,因此,在mongodb数据库配置中要对其内存使用量做限制。
版权声明
本文仅代表作者观点,不代表博信信息网立场。