我们在单个 MongoDb 实例上遇到了非常罕见的崩溃。系统运行良好“多年”,运行在具有 16Gb 内存的 VMWare 虚拟机中。现在在很短的时间内,我们经历了两次:
WT_CURSOR.search:在偏移量 20169220096 处读取 4096B 块的校验和错误:块头校验和 538976288 与预期的校验和 2817788143 不匹配。
在有线老虎代码(block_read.c)中找到产生错误的位置。发现报告的校验和(538976288)实际上是 0x20202020,它是空格字符的 4 倍。
太好的数字是随机的。该系统的负载不断增长,我们不擅长丢弃旧数据。错误我们可以通过丢弃错误的集合来“解决”,但那是在崩溃和数据丢失之后。
任何指向哪里看,我的怀疑是写越界但到目前为止没有证据:-(