解决linux 系统中Mysql 进程占用CPU 300%故障

今日接到同事的电话,说微信公共帐号中的游戏无法登陆,用户不能玩了,麻烦尽快解决。

1、登陆IDC机房查看服务器流量图,流量正常,排除故障与流量无关。

2、登陆微信公共帐号中的游戏所在服务器发现系统互载过高,mysql进程CPU使用率超过300%。

为了快速解决问题直接重启mysql服务后,再查sysql进程CPU使用率依旧高居不下。故障还没有解决,继续寻找原因。

3.登陆mysql数据库,执行show processlist;查看当前正在执行的sql语句,发现几个表出现“sending data”状态,sql执行时间过长。

4、通知开发人员检查这几个表有没有增加索引,开发人员居然无法处理,无语。。。

5、等待开发人员返场的时间里继续查询解决方法。在mysql配置文件my.cnf中增加以下参数:

tmp_table_size = 300M

query_cache_size = 1024M

希望通过增加临时表及查询缓存大小来解决问题,增加这两个参数后,发现CPU占用率有所下降,有一定效果,但还是超过100%。游戏打开依旧缓慢。

6、本着故障不等人,早点解决问题,用户就能继续玩游戏,用户也就不会产生投诉的思想。继续登陆mysql,执行show index from tablename,查询出现“sending data”的几个表,发现果然没有增加索引。此时此该有种想劈人的感觉。

7、执行增加索引的语句,把出现“sending data”的几个表全部加上索引。

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

重启mysql服务后,mysql进程的CPU占用率恢复正常,微信公共帐号中的游戏可以正常登陆,至此故障得到解决。通知同事去验证。

此次事件从问题的开始到问题的结束一共耗时2小时,天天跟开发人员说,需要大量查询的表中一定要加索引、一定要加索引,可是依旧出现因无索引导致发生故障的事件。由此可见规范开发人员的工作习惯、规范开发流程是多么重要。

借此记录一下故障的全过程,也希望能给朋友们一个解决问题思路借鉴。

时间: 2024-12-25 11:57:57

解决linux 系统中Mysql 进程占用CPU 300%故障的相关文章

Linux系统中查看进程和计划任务管理

? 各位小伙伴们大家好,本次给大家带来的是Linux操作系统中的进程和计划任务的管理,首先大家都知道程序是保存在外部存储介质(如硬盘.光盘)中的可执行机器代码和数据的静态集合,而进程是在CPU及内存中处于动态执行状态的计算机程序,在Linux系统中,每个程序启动后可以创建一个或多个进程.例如:提供Web服务的httpd程序当有大量用户同时访问Web页面时,httpd程序可能会创建多个进程来提供服务.那么接下来我将会从以下几点来告诉大家在Linux的CentOS 7系统中是如何查看进程信息和控制进

Linux 系统中僵尸进程

Linux 系统中僵尸进程 Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 僵尸进程如何产生的? 如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了.那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢? 一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的

Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免?

如题 Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免? 一个进程在调用exit命令结束自己的生命的时候,其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,他的作用是使进程退出,但是也仅仅限于一个正常的进程变成了一个僵尸进程,并不能完全将其销毁).在linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态信息供其他进程收集

大神教你如何解决Linux系统80端口被占用

有Linux在centos下面安装webmail服务遇到80端口被占用的问题,导致无法继续安装,下面详细介绍下Linux如何查看.查找.关闭监听80端口服务以更好的的解决80端口被占用的问题. 一.查找80端口服务 那么我们如果要安装80需要先关闭被占用的80端口,切换到 /etc/init.d 服务启动脚本下面查看.如图 httpd 就是啦(如果不确定哪个需要搜索一下) 二.查看监听80端口 首先需要确认一下80端口是否被占用,可以通过输入 (本例以centos为例) netstat -nat

解决Linux系统下Mysql数据库中文显示成问号的问题

当我们将开发好的javaWEB项目部署到linux系统上,操作数据库的时候,会出现中文乱码问题,比如做插入操作,发现添加到数据库的数据中文出现论码,下面就将解决linux下mysql中文乱码问题! 打开Linux窗口,启动mysql. 连接mysql输入show variables like '%char%'; 出现如下图,这样的话在linux下操作mysql会出现中文乱码,所以我们要解决这个问题. 关闭mysql,找到 /etc/my.cnf 文件 3.1 如果没有找到my.cnf文件,就从

解决linux系统中查看中文乱码问题

字符集就是一套文字符号及其编码.常用的字符集有:GBK 定长 双字节 不是国际标准,支持的系统不少UTF-8 非定长 1-4字节广泛支持,MYSQL也使用UTF-8当然了,字符集还有很多,以后再深入学习这部分内容. ①linux系统下的字符集由变量LANG控制. [[email protected] ~]# echo $LANG zh_CN.GB18030 ②export LANG="ZH_CN.GB18030"(临时变更字符集,重启后失效) ③在/etc/sysconfig/i18n

Linux系统中MySQL数据库“主从”配置

MySQL数据库"主从"配置 一.配置概述: 在Linux操作系统中配置MySQL数据库的主从复制是很重要的,为什么这样说呢!是因为在你搭建一个服务器以后你配置了2台数据库,一主一从.2台数据库配置好以后,当其中一台数据库被攻击以后,你被攻击的这台数据库的数据会被自动的备份到另一台数据库中去.即使被攻击了数据也不会丢失.配置主从就是为了让web网站或其他的软件可以正常运转,确保数据的存在. 二.配置步骤: <配置具备的条件> 1.需要在虚拟机上安装好两台主机,同时安装好同一

linux下查找java进程占用CPU过高原因

1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu. 2.查找线程 使用top -H -p <pid>查看线程占用情况 3.查找java的堆栈信息 将线程id转换成十六进制 #printf %x 15664 #3d30 然后再使用jstack查询线程的堆栈信息 语法:jstack <pid> | grep -a 线程id(十六进制) jstack <pid> | grep -a 3d30 这样就找出了有问题的代码了

Linux系统中MySQL的常用操作命令

服务: # chkconfig --list        列出所有系统服务# chkconfig --list | grep on     列出所有启动的系统服务 # chkconfig --list mysqld # whereis mysql  查看文件安装路径# which mysql     查询运行文件所在路径(文件夹地址)usr/bin/mysql 是指:mysql的运行路径var/lib/mysql 是指:mysql数据库文件的存放路径usr/lib/mysql 是指:mysql