一次Mysql故障诊断过程

news/2024/7/16 10:20:25
一次Mysql 故障诊断过程 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

作者:田逸 ([email]sery@163.com[/email]) from:  [url]http://netsecurity.51cto.com/art/200803/67632.htm[/url]

 

那天因参加MS的新品发布大会,中午就离开办公室,当我正在出租车上前往会场的途中,同事打电话来说主数据库出现写保护错误。这可不得了,所有的应用都靠这个数据库呀,我心里默念:千万不要出漏子,否则就不能参会了!于是我在电话里交代同事重启mysql数据库试试,还好,重启后问题解决。

 

一散会,就赶紧上去找故障原因。这里先描述一下平台环境,把逻辑关系弄清楚。在这个应用中,由一个web前段服务器,一个tomcat应用服务器及一个mysql服务器构成,所有的系统都是linux。用户的请求先到前端的apache服务器,如果请求页面是.jspapache就把请求转交给tomcat服务器,tomcat再从数据库获取数据或向数据库插入记录。这是典型的3层应用逻辑。

 

登录到数据库mysql服务器,用mysql客户端连接mysql数据库,执行命令 mysql > show processlist; 没发现什么异常,负载也很低。看来从这里看不出什么名堂。接下来当然该看mysql错误日志,发现如下异常:
080313 11:25:35  InnoDB: Error: cannot allocate 1064960 bytes of
InnoDB: memory with malloc! Total allocated memory
InnoDB: by InnoDB 1233305429 bytes. Operating system errno: 12
InnoDB: Check if you should increase the swap file or
InnoDB: ulimits of your operating system.
InnoDB: On FreeBSD check you have compiled the OS with
InnoDB: a big enough maximum process size.
InnoDB: Note that in most 32-bit computers the process
InnoDB: memory space is limited to 2 GB or 4 GB.
InnoDB: We keep retrying the allocation for 60 seconds...
080313 11:26:08 [ERROR] /usr/local/mysql/bin/mysqld: Sort aborted
080313 11:26:19  InnoDB: Error: cannot allocate 1064960 bytes of
InnoDB: memory with malloc! Total allocated memory
这个报错的大意是:内存基本耗尽,没有再可以分配的空间。由此判断是什么东西产生巨大的负荷导致系统内存被榨干了。不过现在数据库服务器已经趋于平稳,暂时查不到什么原因引起这个故障。

 

基本情况掌握了,停下来休息片刻,于是顺手收一下邮件,乖乖,来了一封报警邮件,赶紧打开,其内容如下:
***** Nagios 2.9 *****

 

Notification Type: PROBLEM

 

Service: check_load
Host: tomcat nch100
Address: 61.154.105.100
State: WARNING

 

Date/Time: Thu Mar 13 10:59:53 CST 2008

 

Additional Info:

 

WARNING - load average: 3.94, 8.56, 9.17

报警消息表明主机61.154.105.10010:59的这个时间负载过大。而这个主机正好是tomcat服务器,看来问题就在这个上面.为了近一步确认自己的想法,我来查看一下网络流量:
   <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
从流量图可以看出,产生异常流量的时间正好与报警信息的时间一致,再给同事打电话,问:“你们都在61.154.105.100 这个机器上干了啥?”,答:“执行了一条不正确的sql语句,发现问题后取消这个sql语句”。至此,原因查明!

 

                                             <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2008-3-17

 

                                            海淀福源门悟真阁

http://www.niftyadmin.cn/n/3040888.html

相关文章

protocol buffer开发文档

欢迎来到protocol buffer开发文档。protocol buffers是一个语言无关、平台无关、序列化结构数据可扩展的用来协议交互、数据存储等的解决方案。本文档的目标受众是那些想要在他们的应用中使用protocol buffer的Java&#xff0c;C或者Python开发者。这个总览将介绍protocol buff…

如何删除写保护的文件_Windows小知识:如何删除“不能”删除的文件?

我们来看看如何删除那些“不能”删除的文件&#xff0c;比如&#xff1a;FlashHelperServiceZhuDongFangYu(这个别乱搞&#xff0c;删了360可能会出问题&#xff1f;)其实&#xff0c;“不能”删除只是看起来不能删而已&#xff0c;并不表示真的就删除不了。不能删除的原因分析…

一个专科出来的计算机学生,月薪两万是否不切实际?

实话实说&#xff0c;不切实际谈不上&#xff0c;但很难。专科生在职场上受到的学历歧视比知乎里大多数人意识到的要强的多。跟很多人想的不同&#xff0c;招人大多数情况下并不是面试官自己拍板就算的&#xff0c;大点的厂子和企业&#xff0c;都要走一套流程&#xff0c;任何…

用swift开发仪表盘控件(二)

二、代码分析 这个控件本质就是从UIView继承的一个类而已。所以整个代码事实上就是一个定制的UIView类。 依据UIView的规则进行例如以下初始化&#xff1a; required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override init(frame: CGRect) { self.poin…

怎么重置mysql5.7的密码_mysql5.7怎么重置密码

mysql5.7重置密码的方法&#xff1a;首先执行【update user set authentication_string password(123456) where user root;】语句&#xff1b;然后重启mysql服务即可。具体方法&#xff1a;关闭MySQL5.7的权限系统找到MySQL5.7的配置文件my.cnf在文件末尾编辑增加代码skip-g…

Google 开源技术protobuf工作原理

1. Protobuf简介 protobuf是google提供的一个开源序列化框架&#xff0c;类似于XML&#xff0c;JSON这样的数据表示语言&#xff0c;其最大的特点是基于二进制&#xff0c;因此比传统的XML表示高效短小得多。虽然是二进制数据格式&#xff0c;但并没有因此变得复杂&#xff0c…

关键词提取有哪些方案?刘志远回答

作者&#xff1a;刘知远 链接&#xff1a;https://www.zhihu.com/question/21104071/answer/24556905 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 我博士阶段的研究课题就是关键词抽取&#xff0c;欢迎下载阅读…

数据库创建表,插入数据,修改

--要求查询出工资比SMITH工资要高的全部雇员信息select ename,sal from emp where sal>800;--查询不是职位不是“CLERK”的员工信息&#xff08;至少用2种方式查询&#xff09; select * from emp; select * from emp where job not like%CLERK%;select empno as 雇员编号是…