MongoDB 常见问题处理(一)(mongodb操作)
wptr33 2025-05-02 13:50 3 浏览
MongoDB维护过程中常用问题处理
MongoDB实例监控中,CPU使用率过高问题排查?
- 使用top命令查看当前CPU资源利用情况,若都在正常范围,则考虑是否频繁操作数据库。
- 确定业务是否有很高的操作数据库频率 若通过监控指标或command line发现,业务QPS过高,则需要考虑升级实例配置,否则排查是否有慢查询堆积。
- 确定是否有慢查询堆积 在主节点用慢查询日志(system.profile)找到超过200ms的语句,然后再通过.explain()解析影响行数,分析为什么超过200ms。
container网络入/出流量告警问题?
当出现网络流量过高的情况,通常是因为服务器与服务器之间拷贝数据导致的,拷贝结束,流量即可恢复正常,如果不是数据拷贝,通常是服务器中毒或者受到攻击,在对内或对外大量发包导致,此时,可按照以下方法进行排查
- 如果您使用的是Linux系统的服务器,可以在系统中安装nethogs查看具体的进程占用流量的情况(如nether eth0->查看网卡具体流量)并杀死该进程;对于一些常见的网络问题,如容器之间网络通信问题,您可以使用Tcpdump工具捕获网络流量,来解决这些网络问题.
- 如果您使用的是windows系统,可通过资源监视器(启动任务管理器>资源监视器>网络)看到哪些进程占用网络流量并结束相关进程.
容器down 后排查处理?
当prometheus监控到容器down指标Container Killed告警,说明容器可能失效或终止运行,以异常状态退出或健康检查失败,k8s的核心组件 kubelet会根据设置的pod重启策略自动重启该容器,例如容器运行时内存超出限制,容器以Failed状态终止,kubelet则自动重启该容器。而pod中的守护进程supervisor会保证mongod服务自动重启。
MongoDB监控里Memory使用率过高?
mongo为了优化读写效率,将内存当做缓存,读写次数越多、数据量越大,缓存就越大。
解决办法:
- 控制并发连接数: MongoDB driver在连接mongod时,会维护一个连接池(默认100),当有大量的客户端同时访问同一个mongod时,就要减少每个客户端连接池的大小,可以在配置文件中通过配置net.maxIncomingConnections来限制最大的并发连接数,防止数据库压力过载。或者增大memory资源。
- 是否配置journal mongodb4.0默认开启journal,这样会持久化存储,不过会耗费内存资源,除非正常关闭数据库。可以在配置文件中关闭journal,不会做持久化存储,而是每分钟做一次全量的checkpoint,所以在异常出现的情况下,会丢掉大概一分钟的数据。
存储使用率达到预警值问题?
mongodb删除数据时,不会直接释放磁盘,而是产生很多碎片。这些碎片会被mongodb继续使用,当有新数据插入时,会重复利用这些碎片,不需要新申请磁盘,导致磁盘会处于高水位的使用水平,由于碎片只会被所属的库使用,在新建很多库的情况下,会使磁盘资源越来越紧张。解决方法:
- 使用命令:df -TH,查看系统的空间使用情况,查看是哪个数据盘资源负载过高,理想情况下,考虑提升系统资源,否则按以下方法排查处理。
- 将准备节点清空,重新同步同步 备节点同步的过程中,碎片空间会被清理。备节点同步的是完全的数据和索引。然后再进行一次主备切换,再将主节点数据清空,同步一次,最终让主备节点都达到释放碎片的目的。
- 使用compact命令 compact是mongodb中的压缩命令,可以删除数据产生的碎片。在WiredTiger引擎下,该命令会将整理出的空间释放给操作系统: 进入要执行的数据库:db.runCommand({compact:"库名/集合名",force:true}),在每一个节点上都需要执行,且带force:true参数,否则出错。
- 做repairDatabase 在mongodb数据库中运行db.repairDatabase() , 或者 db.runCommand({ repairDatabase: 1 })、或带几个参数: db.runCommand({ repairDatabase: 1, preserveClonedFilesOnFailure: <boolean>, backupOriginalFiles: <boolean> } ),这是官方认为唯一可以回收磁盘空间的方法,不过,能不用的情况下,尽量不用,会花费很多时间与性能的。
相关推荐
- 史上最强vue总结,面试开发全靠它了
-
vue框架篇vue的优点轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文文档,不存在语言障碍,易于理解和学习;双向数据绑定:保留了angular的特点,...
- Node.js Stream - 实战篇(node.js 10实战)
-
本文转自“美团点评技术团队”http://tech.meituan.com/stream-in-action.html背景前面两篇(基础篇和进阶篇)主要介绍流的基本用法和原理,本篇从应用的角度,介...
- JavaScript 中的 4 种新方法指南Array.
-
JavaScript中的4种新方法指南Array.prototypeArray其实和Python中的l列表list的操作用非常像JavaScript语言标准的最新版本是ECMAScript...
- Js基础31:内置对象(js 内置对象)
-
js里面的对象分成三大类:内置对象ArrayDateMath...
- 常见vue面试题,大厂小厂都一样(vue经典面试题)
-
一、谈谈你对MVVM的理解?...
- 最全的 Vue 面试题+详解答案(vue面试题2020例子以及答案)
-
前言本文整理了...
- 不产生新的数组,删除数组里的重复元素
-
数组去重的方式有很多,我们可以使用Set去重、filter过滤等,详见携程&蘑菇街&bilibili:手写数组去重、扁平化函数...
- 更简单的Vue3中后台动态路由 + 侧边栏渲染方案
-
时至今日,vue2已经升级到了vue3,动态路由的实现方案也同步做出了一些升级迭代,帮助开发者们更高效的完成业务需求,然后摸鱼。本次逻辑的升级,主要聚焦于2点更加简单的实现逻辑更加便捷的路由配置...
- js常用数组API方法汇总(js数组api有哪些)
-
1.push()向数组末尾添加一个或多个元素,并返回新的长度。//1.push()向数组末尾添加一个或多个元素,并返回新的长度。constarr1=[1,2,3];const...
- JavaScript 数组操作方法大全(js数组的用法)
-
数组操作是JavaScript中非常重要也非常常用的技巧。本文整理了常用的数组操作方法(包括ES6的map、forEach、every、some、filter、find、from、of等)...
- Array类型简介(arrays类常用方法)
-
Array类型除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了。而且,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别。虽然ECMAScript数组与其...
- 鸿蒙开发基础——TypeScript Array对象解析
-
数组对象是使用单独的变量名来存储一系列的值。TypeScript的数组对象提供了强大的类型支持,确保数组操作的类型安全。...
- js中splice的用法,使用说明及例程
-
js中splice的用法,使用说明及例程。splice()方法用于添加或删除数组中的元素,使用起来很怪异。删除会影响原有数组,会返回删除的内容。例1,删除数组内容:varstr=["a...
- 3个 Vue $set 的应用场景(vue中set方法应用场景)
-
大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员,关注我,科技未来或许我能帮到你!...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mysql max (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)