ngine to ‘wiredTiger’.
2025-07-22T17:05:20.228+0800 W STORAGE [initandlisten] Recovering data from the last clean checkpoint.
2025-07-22T17:05:20.228+0800 I STORAGE [initandlisten]
2025-07-22T17:05:20.228+0800 I STORAGE [initandlisten] WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2025-07-22T17:05:20.228+0800 I STORAGE [initandlisten] See Production Notes for Self-Managed Deployments - Database Manual - MongoDB Docs
2025-07-22T17:05:20.228+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=31004M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),cache_size=25G
2025-07-22T17:05:21.107+0800 W STORAGE [initandlisten] Detected configuration for non-active storage engine mmapv1 when current storage engine is wiredTiger
2025-07-22T17:05:21.107+0800 I CONTROL [initandlisten]
2025-07-22T17:05:21.107+0800 I CONTROL [initandlisten] WARNING: Access control is not enabled for the database.
2025-07-22T17:05:21.107+0800 I CONTROL [initandlisten] Read and write access to data and configuration is unrestricted.
2025-07-22T17:05:21.107+0800 I CONTROL [initandlisten] WARNING: You are running this process as the root user, which is not recommended.
一直研究 从这些更多日志来看问题
从MongoDB的日志来看,服务器启动正常并成功恢复数据,但存在几个可能导致频繁掉线的警告和问题:
日志显示MongoDB检测到了未干净的关闭状态:
2025-07-22T17:05:20.217+0800 W - [initandlisten] Detected unclean shutdown - /data/mongodb/mongod.lock is not empty.
影响:这本身不会直接导致频繁掉线,但可能表示之前的关闭存在问题,数据文件可能处于不一致状态。
解决建议:
mongod --shutdown
或通过服务管理工具)日志显示同时配置了wiredTiger
和mmapv1
两种存储引擎:
2025-07-22T17:05:21.107+0800 W STORAGE [initandlisten] Detected configuration for non-active storage engine mmapv1 when current storage engine is wiredTiger
影响:虽然MongoDB会选择使用检测到的数据文件对应的存储引擎(这里是wiredTiger
),但这种冲突配置可能导致不稳定。
解决建议:
/opt/mongodb-3.4.0/mongo.conf
,移除或注释掉与mmapv1
相关的配置,例如:# mmapv1: { smallFiles: true }
日志显示透明大页设置为”always”:
2025-07-22T17:05:21.107+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2025-07-22T17:05:21.107+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
影响:透明大页设置为”always”会导致MongoDB性能下降,可能间接导致连接问题。
解决建议:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 编辑启动脚本或添加系统配置
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local
chmod +x /etc/rc.local
最终是 临时修改把透明大页改了 成功的,基本上没有再掉线
日志提示当前文件系统可能不是最佳选择:
2025-07-22T17:05:20.228+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
影响:虽然这不会直接导致掉线,但使用不推荐的文件系统可能会影响MongoDB的稳定性和性能。
解决建议:
noatime
日志中还提到了两个安全相关的警告:
透明大页是 Linux 内核的一项内存管理优化技术,旨在通过使用更大的内存页(通常为 2MB 或 1GB,而非传统的 4KB)来减少内存管理开销,提高 CPU 缓存命中率。然而,这项技术对 MongoDB 的性能和稳定性可能产生严重负面影响。
MongoDB 在设计上依赖操作系统的内存管理机制(如内存映射文件,mmap),而透明大页会干扰这一过程:
关闭 THP 本身不会直接导致统计功能失效,但可能与以下因素相关:
db.serverStatus()
或第三方监控)可能依赖 THP 提供的内存统计信息。db.currentOp()
监控长时间运行的查询。sysctl
为特定进程设置 THP:echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
这种模式下,只有主动请求大页的应用程序才会使用 THP。
综合考虑下来 必须抛弃THP
top
、htop
或 atop
监控系统内存使用。vmstat
观察内存交换情况。slowms
)捕获性能问题。透明大页虽然旨在优化内存使用,但与 MongoDB 的内存管理模型存在根本冲突,可能导致严重的性能和稳定性问题。关闭 THP 是 MongoDB 生产环境的标准推荐配置。统计功能的实时性问题通常可通过查询优化、架构调整或技术选型解决,不应以牺牲整体稳定性为代价保留 THP。
整体情况直接变好了,也没有在内存溢出,总之 要是我们版本是4.4以上可能根本不会有这个问题,按道理我们配置已经不低了 16核心,64GB内存真不算低配置了。
但是 核心解决方案还是 升级 版本,升级是一件很大的事情,但只有升级改造才是最佳方案,痛是必须痛的。