使用文档数据库时,当实例的内存使用率达到90%,SWAP利用率超过5%时,此时认为实例的内存已达瓶颈,会导致系统响应慢,甚至出现内存溢出(OOM)的隐患。
本章节主要介绍排查解决实例内存使用率高的问题。
查看内存使用情况
您可以通过查看监控指标(内存使用率和SWAP利用率),了解实例内存的使用情况。
具体操作请参见查看监控指标。
图1 查看内存使用情况
说明MongoDB的缓存默认会预留50%的内存,所以即使在实例空载状态下,监控指标仍然会显示内存占用50%,是正常现象,可以忽略。
解决方案
- 控制并发连接数。连接数据库时,需要计算业务一共有多少个客户端, 每个客户端配置的连接池大小是多少,总的连接数不宜超过当前实例能承受的最大连接数的80%。连接太多会导致内存和多线程上下文的开销增加,影响请求处理延时。
- 建议配置连接池,连接池最大不要超过200。
- 降低单次请求的内存开销,例如通过创建索引减少集合的扫描、内存排序等。
- 在连接数合适的情况下内存占⽤持续增⾼,建议升级内存配置,避免可能存在内存溢出和大量清除缓存而导致系统性能急剧下降。
- 集群实例,请参见变更集群实例的CPU和内存规格。
- 副本集实例,请参见变更副本集实例的CPU和内存规格。