定位一个oom问题
当系统出现oom问题时,我们一般的定位思路是怎样的?
系统OOM常见的原因有:
1、用户态内存需求过多,资源不足;
2、大页配置不正确;
3、水位线值异常;
4、slab内存过多;
5、rcu异常;
OOM问题定位步骤如下:
1、查看/proc/meminfo,查看用户态内存和内核态内存分别占用多少内存;通过top命令查看占用内存较多的前10个进程;
1、用户态内存使用过多;
2、top 10的进程存在非虚拟机进程,通常情况下,使用内存最多的是虚拟机进程。如果是费虚拟机进程出现在了前top10里,那么有可能是这个进程有内存泄露的问题;
3、如果top10进程都是虚拟机进程,确认虚拟机的规格是不是超过上限了;
2、查看大页配置是否正确,确认是否大量大页没有使用。如果大页还有剩余,虚拟机都是使用的小页,那么有可能是大页配置的不正确;
3、查看linux系统水位线配置是否正常,水位线,一般配置在文件/proc/sys/vm/min_free_kbytes,水位线控制有3个值,min,low,high,当可用内存低于low时,系统开始回收内存。当可用内存大于high时,停止回收,当可用内存低于min值时,禁止给用户态进程分配内存;当水位线值被误修改为很大的值时,很容易造成用户态内存不足。
4、查看/proc/slabinfo,内核及模块通过kmalloc分配的内存是通过slab管理的,如果这部分内存一直不释放,会导致slab内存使用过多,出现OOM;查看slabinfo,更正常系统对比,检查异常的slab,根据slab名称查看对应的释放代码,排查问题;
5、RCU异常,RCU保护的指针指向的内存释放,需要调用call_rcu或者kfree_rcu来释放,当所有cpu都经过一个grace period后,内存在能真正释放。cpu上触发一次调度后,grace period结束。如果出现了RCU异常,某一个cpu上的grace period结束不了,通过RCU释放的内存就无法真正的释放。一般造成RCU异常的是某一个CPU上发生了死循环。
crash> struct rcu_state.rda rcu_sched_state
rda = 0x141e0
crash> struct rcu_date.qlen 0x141e0:all
如上命令可以打印出每个cpu上rcu中的qlen的大小, qlen为等待释放的object数量,一般情况下这个值在1000以下,如果其他cpu的qlen值都过大,只有一个cpu的qlen值小,那么有可能是这个qlen正常的cpu出现了死循环。
有一次出现OOM,我们就发现一个cpu中的rcu qlen值较小,其他cpu上的rcu qlen值很大,后来重点看这个cpu上的调用栈,分析代码,打印log,后来发现,在这个cpu上由于硬件问题出现了死循环,最后导致一直没有完成一个grace period,后面几个cpu的rcu就没有真正的完成释放,所以他们的qlen值很大,slabinfo查看object数量也很大。
定位一个oom问题的更多相关文章
- 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good
浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...
- MOVE - 重定位一个游标
SYNOPSIS MOVE [ direction { FROM | IN } ] cursorname DESCRIPTION 描述 MOVE 在不检索数据的情况下重新定位一个游标. MOVE AL ...
- 定位一个网络问题引起的ceph异常
前言 有一个ceph环境出现了异常,状态就是恢复异常的慢,但是所有数据又都在走,只是非常的慢,本篇将记录探测出问题的过程,以便以后处理类似的问题有个思路 处理过程 问题的现象是恢复的很慢,但是除此以外 ...
- lseek() 定位一个已经打开的文件
Lseek lseek()的作用是,设置文件内容的读写位置. 每个打开的文件都有一个"当前文件偏移量",是一个非负整数,用以度量从文件开始处计算的字节数.通常,读写操作都是从当前文 ...
- IDEA快速定位一个文件到项目目录
第一步:快捷键搜索java文件关键字 快捷键Ctrl+N,如果设置为Eclipse版本快捷键为Ctrl+Shift+R 第二步:定位文件到项目目录中 1.在当前文件下 2.点击定位按钮 3.定位到项目 ...
- SQL2008:WITH MOVE 子句可用于重新定位一个或多个文件
sql2008数据库 还原备份文件还原产生这个错误的原因是:还原目录下存在多个同名文件, 如图所示,只需要将第2个以及以后的mdf文件改成其它名字就行了,比如s.mdf,s1.mdf等等.
- SQLSERVER数据库还原的时候,报 WITH MOVE 子句可用于重新定位一个或多个文件 的错误,求解决
http://www.flybi.net/question/4070 梁勇 - 天善智能微软BI首席讲师 数据库备份文件还原产生这个错误的原因是:还原目录下存在多个同名文件, 如图所示,只需要将第2个 ...
- css 定位属性position的使用方法实例-----一个层叠窗口
运行结果: <!DOCTYPE html> <html> <head> <title>重叠样式窗口</title> <style ty ...
- java OOM还在看log日志,兄弟你错的的很严重,正确方式是分析dump文件
目录 OOM异常--intsmaze 正确姿势dump文件分析--intsmaze 正确的姿势--intsmaze dump丢失打印--intsmaze 哪些内存溢出会产生dump文件--intsma ...
随机推荐
- PTM人员(产品技术经理)
以下是一位PTM的工作总结: 责任感 作为PTM一定要有责任感,项目中的所有事情都要作为自己的事情,如果碰到有些项目中的工作没人负责,那么就是PTM的工作没有做到位. 全局观 作为PTM一定要比普 ...
- 关于 share 音乐分享官方文档补充
例子 音乐分享 /*--------微信朋友圈--------*/ [shareParams SSDKSetupWeChatParamsByText:@"内容" title:@&q ...
- Spring声明式事务的两种配置方式(注解/xml)
application配置tx:annotation-driven 配置声明式事务tx:TransactionManager 声明式事务需要数据源所以需要配置DataSource 使用:在类或者方法上 ...
- 一键生成的BI智能数据看板谁不爱?
随着互联网思维的深化,如财务.市场.运营.销售等越来越多的岗位,都开始重视并自发性的开始了解并学习数据分析,来引导帮助决策. 人力资源制定效能仪表盘,去实时掌握人员状况和人均效能,通过对招聘漏斗的分析 ...
- 帆软思迈特软件Smartbi两家区别在哪里?
简单介绍下,从前端展现市场来看,国内这几年帆软算是做的比较好的一家公司,整体市场营销,以及产品易用性也是不错.思迈特公司也是一家专门从事做数据分析平台的公司,也有接近20年的历史,早期从银行.金融证券 ...
- Spring系列22:Spring AOP 概念与快速入门篇
本文内容 Spring AOP含义和目标 AOP相关概念 声明式AOP快速入门 编程式创建代理对象 Spring AOP含义和目标 OOP: Object-oriented Programming 面 ...
- MySQL让人又爱又恨的多表查询
1. 前言 在SQL开发当中,多表联查是绝对绕不开的一种技能.同样的查询结果不同的写法其运行效率也是千差万别. 在实际开发当中,我见过(好像还写过~)不少又长又臭的查询SQL,数据量一上来查个十几分钟 ...
- 在 CentOS 或 RHEL 系统上检查可用的安全更新的方法
当你更新系统时,根据你所在公司的安全策略,有时候可能只需要打上与安全相关的补丁.大多数情况下,这应该是出于程序兼容性方面的考量.那该怎样实践呢?有没有办法让 yum 只安装安全补丁呢? 答案是肯定的, ...
- 三大数据库 sequence 之华山论剑 (下篇)
MySQL 5.7 MYISAM ENGINE 以下是 MySQL 5.7 MYISAM ENGINE 中的运行结果 mysql> CREATE TABLE tb_test5 ( -> t ...
- WeifenLuo.WinFormsUI.Docking 简单入门
WinForm布局,开源且好用的貌似不多,WeifenLuo.WinFormsUI.Docking 这个是其中之一,这个唯一的不好地方,就是没有文档,只能通过读源码,不过它源码里面也提供了一个例子 ...