MongoDB 如何使用内存? 为什么内存满了?( 三 )

eviction_dirty_target5当 cache dirty 超过 eviction_dirty_target , 后台evict线程开始淘汰 DIRTY PAGEeviction_dirty_trigger20当 cache dirty 超过 eviction_dirty_trigger 用户线程也开始淘汰 DIRTY PAGE

在这个规则下 , 一个正常运行的 MongoDB 实例 , cache used 一般会在 0.8 * cacheSizeGB 及以下 , 偶尔超出问题不大;如果出现 used>=95% 或者 dirty>=20% , 并一直持续 , 说明内存淘汰压力很大 , 用户的请求线程会阻塞参与page淘汰 , 请求延时就会增加 , 这时可以考虑「扩大内存」或者 「换更快的磁盘提升IO能力」 。

TCP 连接及请求处理

MongoDB Driver 会跟 mongod 进程建立 tcp 连接 , 并在连接上发送数据库请求 , 接受应答 , tcp 协议栈除了为连接维护socket元数据为 , 每个连接会有一个read buffer及write buffer , 用户收发网络包 , buffer的大小通过如下sysctl系统参数配置 , 分别是buffer的最小值、默认值以及最大值 , 详细解读可以google 。

推荐阅读