转载自:http://www.sohu.com/a/114903225_487483

Inside君最近把金庸先生的笑傲江湖重看了三遍,感慨良多。很多工作、管理、生活、学习上的问题都能在其中一窥究竟,而那是年轻时所不能体会的一种感悟。比如下面的这段话:

风清扬又道:“单以武学而论,这些魔教长老们也不能说真正已窥上乘武学之门。他们不懂得,招数是死的,发招之人却是活的。死招数破得再妙,遇上了活招数,免不了缚手缚脚,只有任人屠戮。这个‘活’字,你要牢牢记住了。学招时要活学,使招时要活使。倘若拘泥不化,便练熟了几千万手绝招,遇上了真正高手,终究还是给人家破得干干净净。”

今天,来谈谈MySQL的OOM(out of memory)问题诊断。之前,这类问题的定位对于普通用户来说并不怎么简单。但是在MySQL 5.7中,OOM问题的定位变得极其容易。还没掌握的小伙伴赶快来看下吧。通常来说,发生OOM时可在系统日志找到类似的日志提示:

[3207032.031552] bash invoked oom-killer: gfp_mask=0x280da,order=0, oom_score_adj=0

[3207032.031561] bash cpuset=/ mems_allowed=0-1

[3207032.031566] CPU: 1 PID: 5019 Comm: bash Not tainted3.10.0-327.22.2.el7.x86_64 #1

[3207032.031568] Hardware name: Huawei Technologies Co.,

[3207032.031570] ffff8802322b7300 00000000922e27ce ffff8803f0c9baf8 ffffffff816360fc

[3207032.031576] ffff8803f0c9bb88 ffffffff8163109c ffff88003547bde0 ffff88003547bdf8

[3207032.031579] 0000000000000206 ffff8802322b7300 ffff8803f0c9bb70 ffffffff81128c7f

[3207032.031583] Call Trace:

[3207032.031596] [<ffffffff816360fc>] dump_stack+0x19/0x1b

[3207032.031600] [<ffffffff8163109c>] dump_header+0x8e/0x214

[3207032.031614] [<ffffffff81128c7f>] ? delayacct_end+0x8f/0xb0

[3207032.031620] [<ffffffff8116d20e>] oom_kill_process+0x24e/0x3b0

[3207032.031623] [<ffffffff8116cd76>] ? find_lock_task_mm+0x56/0xc0

[3207032.031626] [<ffffffff8116da36>] out_of_memory+0x4b6/0x4f0

[3207032.031630] [<ffffffff81173c26>] __alloc_pages_nodemask+0xaa6/0xba0

[3207032.031637] [<ffffffff811b7eba>] alloc_pages_vma+0x9a/0x150

[3207032.031643] [<ffffffff81197a85>] handle_mm_fault+0xb85/0xf50

[3207032.031648] [<ffffffff81641d80>] __do_page_fault+0x150/0x450

[3207032.031651] [<ffffffff816420a3>] do_page_fault+0x23/0x80

[3207032.031656] [<ffffffff8163e308>] page_fault+0x28/0x30

MySQL 5.7的库performance_schema新增了以下这几张表,用于从各维度查看内存的消耗:

  • memory_summary_by_account_by_event_name

  • memory_summary_by_host_by_event_name

  • memory_summary_by_thread_by_event_name

  • memory_summary_by_user_by_event_name

  • memory_summary_global_by_event_name

简单来说,就是可以根据用户、主机、线程、账号、全局的维度对内存进行监控。同时库sys也就这些表做了进一步的格式化,可以使得用户非常容易的观察到每个对象的内存开销:

细心的同学可能会发现,默认情况下performance_schema只对performance_schema进行了内存开销的统计。但是在对OOM进行诊断时,需要对所有可能的对象进行内存监控。因此,还需要做下面的设置:

mysql> update performance_schema.setup_instruments set

enabled = 'yes' where name like 'memory%';

Query OK, 310 rows affected (0.00 sec) Rows matched: 380 Changed: 310 Warnings: 0

但是这种在线打开内存统计的方法仅对之后新增的内存对象有效:

如想要对全局生命周期中的对象进行内存统计,必须在配置文件中进行设置,然后重启:

通过上面的结果,有小伙伴是不是已经发现可疑的内存使用了呢?memory/innodb/os0file这个对象使用了1.42G内存,而整个数据库实例的Buffer

Pool只有1.05G。那么这时就可以去bugs.mysql.com上去搜索下。果不其然,是一官方已知问题,并已在5.7.14中修复。

通过类似方法Inside君已经定位了5起OOM问题。当然,这里Inside君只是给了一个思路,活学活用,才能达到无招胜有招的至臻境界。

MySQL 5.7 OOM问题诊断——就是这么简单的更多相关文章

  1. MySQL 5.6 OOM 问题解决分享【转】

    本文来自:杨德华的原创分享 | MySQL 5.6 OOM 问题解决分享 延伸阅读:Linux的内存回收和交换 当遇到应用程序OOM的时候,大多数时候只能用头疼来形容,应用程序还可以通过引流来临时重启 ...

  2. (转)MySQL 5.6 OOM 问题解决分享

    本文来自:杨德华的原创分享 | MySQL 5.6 OOM 问题解决分享 原文:http://www.cnblogs.com/zhoujinyi/p/5763112.html 延伸阅读:Linux的内 ...

  3. 如何把mysql的列修改成行显示数据简单实现

    如何把mysql的列修改成行显示数据简单实现 创建测试表: 1: DROP TABLE IF EXISTS `test`; 2: CREATE TABLE `test` ( 3: `year` int ...

  4. SQLserver , MySQL的区别和各自的一些简单方法案列

    SQL Server数据库和MySQL数据库有什么区别呢?今天我们来分析一下这两种数据库的不同之处以及这两种数据库的一些简单用途:SQL Server数据库和MySQL数据库有什么区别: 对于程序开发 ...

  5. MYSQL、PHP基础、面向对象基础简单复习总结

    一.MYSQL         1.配置MySql                 第一步安装服务器(apache).                 第二部安装MySql界面程序         2 ...

  6. [MySQL] 两个优化数据库表的简单方法--18.3

    这里介绍两个简单的优化MySQL数据库表的方法 一.定期分析表和检查表 1.分析表语法如下: alalyze [local|no_write_to_binlog] table table_name1[ ...

  7. mysql 利用触发器(Trigger)让代码更简单

    一,什么触发器 1,个人理解 触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了.你放炮仗,点燃了,一会就炸了. 2,官方定义 触发器 ...

  8. CentOS下将php和mysql命令加入到环境变量中-简单

    开发过程中.需要使用到php命令执行程序.但是php命令没有在全局命令中:每次执行都需要加上全路径特别麻烦,把php命令添加到全局变量中,以后每次只用输入php可以了 例: php -v  或 mys ...

  9. MySQL服务器发生OOM的案例分析

    [问题] 有一台MySQL5.6.21的服务器发生OOM,分析下来与多种因素有关 [分析过程] 1.服务器物理内存相对热点数据文件偏小,62G物理内存+8G的SWAP,数据文件大小约550G 触发OO ...

随机推荐

  1. Django 1.8.2 admin 数据库操作按下保存按钮出错

    Django报错:Runtimeerror: generator raised StopIteration python版本太新不兼容照成,下载python3.6就行了

  2. WUSTOJ 1274: 喂,这里是帅帅的LCM(Java)

    1274: 喂,这里是帅帅的LCM 题目   在一组数中,找出个数为奇数的数.更多内容点击标题. 分析   其实这种题并不难,做过一次之后,绝对不会错第二次.通过读题可以发现,我们要找的那个数在这一堆 ...

  3. CentOS7离线安装Nginx(详细安装过程)

    CentOS7离线安装Nginx(详细安装过程) 1.安装gcc.g++ 下载好所需的文件后上传至服务器(下载地址:https://download.csdn.net/download/a729360 ...

  4. Windows 服务 安装后自启动

    [RunInstaller(true)] public partial class ProjectInstaller : System.Configuration.Install.Installer ...

  5. 客户端相关知识学习(十二)之iOS H5交互Webview实现localStorage数据存储

    前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...

  6. Centos7 配置 svn服务端

    转载至:Linux(阿里云Centos7)环境下搭建svn服务器以及权限配置详细步骤 本篇文章主要介绍在CentOS7中采用yum安装方式.优点:简单,一键安装,不用手动配置环境变量等.缺点:安装位置 ...

  7. KVM之virsh管理虚拟机网卡配置

    虚拟机网卡管理 virsh attach-interface 添加网卡: [root@ubuntu ~]# virsh domiflist CentOS-V6.5.23-server01 Interf ...

  8. dubbo框架梳理

    Dubbo分层 Dubbo框架运行主要分如下九层: 配置层:config 服务代理层:proxy 注册中心层:registry 路由层:cluster 监控层:monitor 远程调用层:protoc ...

  9. [Python] For 嵌套循环打印图形 nested loop - 练习题

    [python的for循环嵌套打印如下图形] 图形一: ******* ******* ******* ******* 图形二: * *** ***** ******* 图形三: * *** **** ...

  10. linux 、 CentOs ---> 环境变量设置

    Linux下环境变量设置 1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错 ...