MongoDB莫名崩溃的问题定位与解决纪实

MongoDB莫名崩溃的问题定位与解决纪实

国庆之前发布的软件版本一直运行正常,国庆之后,测试同事跑自动化测试脚本,发现该软件频繁异常,通过查看log发现,该软件使用的MongoDB崩溃了。

该软件是个Windows的桌面软件,由于需要存储大量数据,会后台启动MongoDB,并以此作为数据存储库。

报错信息

shell 复制代码
## error 1
[thread1] WiredTiger error (16) [1697520288:390687][8764:140707646429280], log-server: __win_fs_rename, 125: D:\data5\mongodb\data\journal\WiredTigerTmplog.0000000002 to D:\data5\mongodb\data\journal\WiredTigerPreplog.0000000001: file-rename: MoveFileExW: 另一个程序正在使用此文件,进程无法访问。\r\n: Resource device Raw: [1697520288:390687][8764:140707646429280], log-server: __win_fs_rename, 125: D:\data5\mongodb\data\journal\WiredTigerTmplog.0000000002 to D:\data5\mongodb\data\journal\WiredTigerPreplog.0000000001: file-rename: MoveFileExW: 另一个程序正在使用此文件,进程无法访问。\r\n: Resource device

## error 2
2023-10-12T15:17:52.032+0800 W  FTDC     [ftdc] Uncaught exception in 'FileRenameFailed: 另一个程序正在使用此文件,进程无法访问。' in full-time diagnostic data capture subsystem. Shutting down the full-time diagnostic data capture subsystem.

原因分析

  • 这是mongodb的数据目录里面的文件,按理其他程序不会去操作这些文件,难道是因为启动了多个mongod进程?

措施:重启电脑,重新运行软件,结果还是会有这个报错

  • 已发布版本,国庆之前都正常,而且从来没出现过这个error,莫非是系统有啥升级?

咨询IT,反馈系统没有升级

  • mongodb bug?

直觉和理性告诉我,应该不是,不然为啥国庆节前没有出现过,节后频繁出现。

类似案例查找

一顿搜索。。。结果99.99999%都是无用信息,直到在mongodb社区发现这篇帖子
Mongod random crashes on Windows: FileRenameFailed

社区工作人员回复:
Sorry you're having difficulty with this issue, but unfortunately I believe the error FileRenameFailed originated from outside the server, so it's typically an OS level issue.这句话基本印证了我的猜想,不是mongodb的问题,也不是我的软件问题

再继续。。看到最后个回复,
I just had the same issue with mongodb 4.4.22. I enabled file auditing on windows and it appears Kaspersky is to blame: 卡巴斯基是罪魁祸首!!!我电脑没装卡巴斯基,但是装了"腾讯安全管家",欣喜若狂呀,赶紧把安全管家退出了!!!

但,高兴的有点早,测试下来mongodb还是会报错,一样一样的。

不过,这个回答还是给了有用信息,I enabled file auditing on windows,如果能监控下是哪个软件占用了程序,就知道是谁在搞事情!

问题是,怎么监控呢?

监控文件被哪些软件读写

  • 通过本地组策略编辑器 修改 审核策略,访问文件都增加审核
  • "本地组策略编辑器" 怎么打开呢,win+r,输入gpedit.msc,回车

报错:gpedit.msc不存在!!!又是一顿搜索,windows家庭版默认不开启gpedit.msc。。。

  • 安装gpedit.msc,powershell运行如下命令:
shell 复制代码
Get-ChildItem -Path "C:\Windows\servicing\Packages\*" |
Where-Object{($_.Name -like "Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum")`
-or ($_.Name -like "Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum")} |
foreach {dism.exe /online /norestart /add-package:$_}
  • 修改审核策略

计算机配置->Windows 设置 -> 安全设置 -> 本地策略 -> 审核策略 -> 审核对象访问

  • 添加待审核文件夹

选中D:\data5\mongodb\data\journal 目录,右键->属性->安全->高级->审核->添加,添加Everyone -> 应用,保存

  • 查看"事件查看器"中的审核日志

windows 搜索直接搜索"事件查看器"即可,Windows日志->安全,选中任意一条事件,就能看到事件详细信息,如下图所示:

  • 搜索被占用的文件名,看看这个文件被哪些软件占用了(也就是触发了访问审核的,有审核日志的),在事件查看器中按Ctrl+F搜索文件名

  • 终于找到了罪魁祸首!这个奇怪的exe再读写mongodb的文件!!!!

  • 这是啥呢?找IT,IT说这是公司的安全管理软件。。。。得了,终于找到证据了,IT同事你上吧。。

  • 最后IT同事通过修改这个软件的配置信息,忽略mongodb文件夹的读写规避了这个问题。

参考资料

后言

  • 要理性分析,并相信自己的专业判断。
  • 别人说的话,不要全信,如果你怀疑,那要拿出证据来,不然别人不会承认的。
  • 证明自己没错很难,证明是别人的错,更难。
相关推荐
Nontee4 小时前
新手建表指南:数据库主键选自增ID还是UUID?
数据库·oracle
AI智图坊4 小时前
亚马逊多站点Listing视觉制作的效率瓶颈与AI解决方案:GPT-Image-2与Nano Banana Pro双模型分析
大数据·前端·数据库·人工智能·自动化·aigc
wanghao6664554 小时前
精益方法论:用更少的资源创造更大的价值
大数据·前端·数据库·敏捷开发
fQ9F9I58m4 小时前
Redis 分布式锁进阶第三百一十一篇
数据库·redis·分布式
无聊的老谢4 小时前
电信系统中的单元测试策略:构建高可靠性的微服务防线
数据库·微服务·单元测试
码不停蹄的玄黓4 小时前
MySQL 慢查询日志 核心参数详解
数据库·mysql
音乐宝贝家4 小时前
户外演出时吉他实际音量、音质等表现数据究竟如何?
数据库·新媒体运营·媒体·材质·内容运营
iiiiyu5 小时前
IO流相关编程题
java·大数据·开发语言·数据结构·数据库·mysql
AIOps打工人5 小时前
数据库运维工具选型 2026 横评:dbskiter vs MySQL Workbench vs percona_toolkit vs Navicat
运维·数据库·mysql