Windows环境下MongoDB启动卡顿数分钟问题求助
mongod.exe启动卡顿问题排查求助
问题现象
- 社区版mongod.exe以独立无复制模式启动后,会随机出现启动卡顿,时长从几秒到数分钟不等,偶有无卡顿情况
- 开发场景下频繁重启时,多数延迟在20秒左右
- 卡顿期间无进程日志输出,无法建立连接(未开始监听端口,甚至未加载数据库文件),卡顿结束后程序运行完全正常,无延迟或崩溃
环境与复现特征
- 仅在Windows 10 x64 Pro 22H2本地电脑及指定Windows容器中出现问题,其他同事/朋友的设备无此现象
- 容器环境(基础镜像:mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 [0f9b29d3ffaf])中必现卡顿,延迟5-15秒,此为核心生产环境问题
- 数据库无认证配置,未启用SSL/TLS;绑定地址固定为127.0.0.1,仅允许本地连接
- 无论是作为.NET Framework 4.6.2程序的子进程启动,还是手动启动,均会出现卡顿
- 卡顿模式随机,空dbpath(新建数据库)或现有数据库无差异;管理员权限不影响问题发生
已尝试的无效解决方案
- 更换MongoDB版本:v3.4.4(容器指定版本,无法升级)、v5.0.8均存在相同问题
- 网络相关调整:更换空闲端口、修改
--bind_ip参数,无变化 - 存储相关调整:设置
--smallFiles、--syncdelay 0 --nojournal、执行-repair、更换dbpath至其他驱动器;甚至拒绝dbpath读写权限仍会出现初始延迟 - WiredTiger参数调整(无效果):
db.adminCommand( { "setParameter": 1, "wiredTigerEngineRuntimeConfig": "eviction=(threads_min=20,threads_max=20),checkpoint=(wait=60),eviction_dirty_trigger=5,eviction_dirty_target=1,eviction_trigger=95,eviction_target=80"})
- 其他:按Ctrl+C无法立即停止进程,输出结果不固定
个人分析
- 延迟发生在WiredTiger相关日志输出之前,因此大概率不是WiredTiger引擎配置问题,但仍欢迎相关优化建议
- 延迟出现在初始化日志阶段,查看MongoDB源代码后发现,存在多个用
MONGO_INITIALIZER声明的静态核心初始化器,执行顺序随机,日志中ctx字段在'-'和'main'之间切换,推测可能是某未记录日志的初始化器导致了启动延迟
卡顿阶段日志示例
程序通常卡在以下日志节点之间:
{"t":{"$date":"2023-07-25T09:32:53.778+00:00"},"s":"D1", "c":"CONTROL", "id":22615, "ctx":"-","msg":"Loading library: {toUtf8String_full_path_c_str}","attr":{"toUtf8String_full_path_c_str":"Schannel.dll"}} {"t":{"$date":"2023-07-25T09:32:53.781+00:00"},"s":"I", "c":"NETWORK", "id":4915701, "ctx":"-","msg":"Initialized wire specification","attr":{"spec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":13},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":13},"outgoing":{"minWireVersion":0,"maxWireVersion":13},"isInternalClient":true}}} {"t":{"$date":"2023-07-25T09:32:53.783+00:00"},"s":"I", "c":"CONTROL", "id":23285, "ctx":"main","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"} {"t":{"$date":"2023-07-25T09:33:57.033+00:00"},"s":"D2", "c":"-", "id":4777800, "ctx":"main","msg":"Ran initializers","attr":{"nodes":["BeginServerParameterRegistration","idl_2d027c0f06ff60334b8c977697f76a27b3b6872d","RegisterErrorExtraInfoForErrorExtraInfoExample","RegisterErrorExtraInfoForDuplicateKeyErrorInfo","RegisterErrorExtraInfoForResolvedView","RegisterErrorExtraInfoForOptionalErrorExtraInfoExample","..."]}}
卡顿结束后程序正常运行,无明确警告或错误。
内容的提问来源于stack exchange,提问作者Den4MD
相关产品推荐
相关产品推荐

