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文件夹的读写规避了这个问题。

参考资料

后言

  • 要理性分析,并相信自己的专业判断。
  • 别人说的话,不要全信,如果你怀疑,那要拿出证据来,不然别人不会承认的。
  • 证明自己没错很难,证明是别人的错,更难。
相关推荐
落笔画忧愁e36 分钟前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书
Σίσυφος19001 小时前
halcon 条形码、二维码识别、opencv识别
前端·数据库
小刘|1 小时前
深入理解 SQL 注入漏洞及解决方案
数据库·sql
天上掉下来个程小白2 小时前
案例-14.文件上传-简介
数据库·spring boot·后端·mybatis·状态模式
哆木2 小时前
排查生产sql查询缓慢
数据库·sql·mysql
橘子师兄3 小时前
分页功能组件开发
数据库·python·django
book01214 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
纠结哥_Shrek4 小时前
Oracle和Mysql的区别
数据库·mysql·oracle
极客先躯4 小时前
说说高级java每日一道面试题-2025年2月13日-数据库篇-请说说 MySQL 数据库的锁 ?
java·数据库·mysql·数据库的锁·模式分·粒度分·属性分
做梦敲代码4 小时前
达梦统计信息
数据库·达梦数据库