天天看点

记一次项目网站访问慢问题排查处理问题排查问题解决mysql索引相关传送门

文章目录

  • 问题排查
    • 1 服务器信息查看
      • top命令使用
      • 显示信息详解
        • top命令第一行
        • top命令第二行--进程状态
        • top命令第三行--CPU状态
        • top命令第四行--内存状态
        • top命令第五行--swap交换分区
        • top命令第七行--进程监控
    • 2 数据库分析
    • 3 慢查询分析
  • 问题解决
  • mysql索引相关传送门

问题排查

1 服务器信息查看

top命令使用

使用top命令进行服务器相关信息查看,查看是内存不够、CPU处理能力不够、IO读写过高….等。

记一次项目网站访问慢问题排查处理问题排查问题解决mysql索引相关传送门

服务器为多核,因此需要按下按键“1”查看全部CPU具体信息。

记一次项目网站访问慢问题排查处理问题排查问题解决mysql索引相关传送门

显示信息详解

top命令第一行

top - 11:01:20 up 486 days, 19:31,  1 user,  load average: 0.21, 0.28, 0.30
           

依次对应:系统当前时间 up 系统到目前为止i运行的时间, 当前登陆系统的用户数量, load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况。

这行信息与命令uptime显示的信息相同

注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

top命令第二行–进程状态

Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
           

依次对应:tasks表示任务(进程),183 total则表示现在有183个进程,其中处于运行中的有1个,182个在休眠(挂起),stopped状态即停止的进程数为0,zombie状态即僵尸的进程数为0个。

top命令第三行–CPU状态

%Cpu(s):  0.6 us,  0.2 sy,  0.0 ni, 95.0 id,  0.0 wa,  0.0 hi,  0.0 si,  4.1 st
           

依次对应:

us:user 用户空间占用cpu的百分比

sy:system 内核空间占用cpu的百分比

ni:niced 改变过优先级的进程占用cpu的百分比

空闲cpu百分比

wa:IO wait IO等待占用cpu的百分比

hi:Hardware IRQ 硬中断 占用cpu的百分比

si:software 软中断 占用cpu的百分比

st:被hypervisor偷去的时间

多核服务器需要展开查看具体CPU状态

top命令第四行–内存状态

KiB Mem : 32753588 total,  1142352 free, 25133012 used,  6478224 buff/cache
           

依次对应:物理内存总量;空闲内存总量;使用中的内存总量;缓冲内存量;

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心

top命令第五行–swap交换分区

KiB Swap:  4194300 total,  2880252 free,  1314048 used.  6677308 avail Mem 
           

依次对应:交换区总量;空闲交换区总量;使用的交换区总量;在不交换的情况下,对启动新应用程序可用内存的估计

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

top命令第七行–进程监控

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 
           
  • 1

依次对应:

PID — 进程id

USER — 进程所有者

PR — 进程优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR — 共享内存大小,单位kb

S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU — 上次更新到现在的CPU时间占用百分比

%MEM — 进程使用的物理内存百分比

TIME+ — 进程使用的CPU时间总计,单位1/100秒

COMMAND — 进程名称(命令名/命令行)

2 数据库分析

show PROCESSLIST

查看数据库进程信息,从执行及等待时间查找慢语句

记一次项目网站访问慢问题排查处理问题排查问题解决mysql索引相关传送门

有时info的sql语句过长无法全部显示,则需要使用下面命令

select * from information_schema.processlist;
记一次项目网站访问慢问题排查处理问题排查问题解决mysql索引相关传送门
show OPEN TABLES where In_use > 0;

查询是否锁表 ,使用下面命令可进行锁表进程kill

SELECT CONCAT(‘kill ‘,trx_mysql_thread_id,’;’) FROM INFORMATION_SCHEMA.INNODB_TRX;
记一次项目网站访问慢问题排查处理问题排查问题解决mysql索引相关传送门

反复执行该语句查看是否存在同一进程或进程过多,直接执行“kill 4147”则可杀死该进程

3 慢查询分析

开启并配置完慢查询日志后,超过配置阀值的查询时间语句会写入slow.log中。【如何开启及配置不做描述,可查阅相关资料】

使用tail命令动态阅读慢查询日志看是否存在长时间查询语句,如下。

记一次项目网站访问慢问题排查处理问题排查问题解决mysql索引相关传送门

若日志刷新过快可使用日志截取语句进行截取:

先进入log所在文件夹下:
sed -n "/16:40:00/,/16:53:00/p" slow.log >2021slow.log
           

问题解决

由于大量访问造成的数据库查询压力,排查慢查得知查询过慢语句,添加索引进行优化处理。

mysql索引相关传送门

MySQL索引的创建与使用

mysql 如何添加索引

USING BTREE 是什么意思 有什么作用 Mysql

继续阅读