当前位置: 首页 > news >正文

记一次线上OOM事故

OOM 问题

linux内核有个机制叫OOM killer(Out-Of-Memory killer),当系统需要申请内存却申请不到时,OOM killer会检查当前进程中占用内存最大者,将其杀掉,腾出内存保障系统正常运行。
一般而言,一个应用的内存逐渐增加,肯定是不正常的,这个时候可认为该应用存在内存泄漏,当系统内存被占用到一定的时候,将会触发OOM,此时系统将会找一个最合适的进程杀掉,以释放内存。

原因:
大query带来内存上涨,大量连表查询加载数据到内存中,进行数据筛选,导致内存上涨,触发linux oom 机制 ,杀掉mysql ,同时表数量较多导致innodb数据字典内存占用多
内部解决思路:
1.先进行数据库配置升级,海豚库升级到16c128G配置,略知库升级到8c32g。
2.持续监测内存,发现内存占用基本60%左右。
3.进行慢sql,连表查询sql优化。
4.计划迁移mysql 到polardb。
5.排查linux日志,定位触发oom的时候mysql 占用内存大小。以及附近sql。
6.设置mysql 禁用oom机制,将mysql评分降为最低,oom时候 只会杀掉评分最高的进程。
7.降低mysql Buffer Pool值,因为阿里云rds 默认此值占用过高(最高65%内存),降低缓存区大小,可以预留一部分内存作为抵抗不可控风险使用。
8.彻底关闭linux oom机制。 sysctl -w vm.panic_on_oom=1
实际执行中遇到的问题:

  • 由于阿里云RDS只支持对数据库的使用,不支持对系统层面的一些配置。所以上述第6条、上述第8条,不可用
  • 由于阿里云RDS配置Buffer Pool
    需要重启mysql,项目量级较大,重启耗时半小时以上,所以上述第7条,不可用,有动态调整缓存区大小方案,但是性能抖动很激烈,花费时间更久,不推荐。
  • 由于阿里云RDS不支持查询linux日志,oom日志暂未获得,阿里方给了一部分oom附近sql。进行参考优化。
  • 由于迁移polardb对现在数据库性能影响较大,迁移时间不可控,迁移过程中增量数据迁移方案未确定,目前正在调研中。
http://www.lryc.cn/news/131249.html

相关文章:

  • Learning to Super-resolve Dynamic Scenes for Neuromorphic Spike Camera论文笔记
  • 怎么使用手机远程控制Win10电脑?
  • W6100-EVB-PICO 做UDP Client 进行数据回环测试(八)
  • Typora 相对路径保存图片以及 Gitee 无法显示图片
  • 深入探索:Kali Linux 网络安全之旅
  • Python 实现语音转文本
  • 使用DSA、ECDSA、Ed25519 和 rfc6979_rust实现高安全性的数字签名
  • “深入探索JVM内部机制:解密Java虚拟机的奥秘“
  • css3新增属性
  • 自动驾驶港口车辆故障及事故处理机制
  • 【leetcode 力扣刷题】快乐数/可被k整除的最小整数(可能存在无限循环的技巧题)
  • Python 的下一代 HTTP 客户端
  • 网络安全---webshell实践
  • 论AI GPT跨境贸易架构及其应用
  • github的CodeSpace如何对外提供TCP 端口服务?
  • 借助Midjourney创作龙九子图
  • Azure存储访问层
  • Unity进阶–通过PhotonServer实现人物移动和攻击–PhotonServer(五)
  • 中间件: Redis安装与部署
  • Java日志框架-JUL
  • 【Java】智慧工地SaaS平台源码:AI/云计算/物联网/智慧监管
  • Dodaf架构的学习分享
  • 听GPT 讲Prometheus源代码--discovery
  • HTTP 介绍
  • Rust语言深入解析:后向和前向链接算法的实现与应用
  • 快速提高写作生产力——使用PicGo+Github搭建免费图床,并结合Typora
  • Java方法的参数可以有默认值吗?
  • 电子商务的安全防范
  • STM32开关输入控制220V灯泡亮灭源代码(附带PROTEUSd电路图)
  • Spring Boot配置文件