mongo version: 3.0.7
os ram: 256G
os : centos/redhat 6.2
mongod --port 27612 --master --wiredTigerCacheSizeGB 200 --journalCommitInterval 300 --oplogSize 100000 --storageEngine wiredTiger --fork --dbpath /disk1/xxxxx --logpath /disk1/logs/xxxxx_3.0.log --logappend --wiredTigerDirectoryForIndexes --directoryperdb
架构: master-slave
现象:
mongostat 观察master上used 正常情况下均保持在80%,有时会突然快速增大到100%,之后一直保持在100%,性能急剧下降,log里面大量的慢查询(>100ms),导致应用层处理能力下降几个级别。
后来观察达到100%时swap会被用尽(2G), 于是修改wiredTigerCacheSizeGB到默认值(1/2内存), 但跑了一段时间,依旧会达到100%,而且一但达到100%,ar/aw 飙升,qps下降,slow query增多,除了手动重启,性能很难降恢复。
这里一直不清楚为什么wiredtiger cache使用达到80%的时候会不使用或减缓使用, 过段时间又可能增大到100%,什么情况下会导致它达到100%呢?
我们的master上只有一个db一个collection,每个collection包含30亿+的document, 确认过来的请求大多是针对最近单条document的”query/update”。
在mongodb官方的issue上看到了相同的现象,自己也跟了几个comment,但仍然没有找到rootcase
FYI:
https://jira.mongodb.org/browse/SERVER-21782
没有,已经确认是wiredtiger 在高并发下cache刷新机制的bug,官方也不断在优化,在3.2.10版本算是优化的最好吧,但无法根本解决,目前已有升级打算。