|||
在Linux中,Top命令详细展示了系统当前的资源使用情况。它能够实时更新并显示系统的整体负载情况、CPU使用率、内存使用情况、交换空间使用情况等信息,帮助用户了解系统的实时运行状态,同时显示系统中各个进程的资源使用情况。
在使用MySQL场景中,通过使用Top命令,可以很好的了解性能瓶颈,故障原因等。下面介绍Top命令展示的指标,在MySQL中应对的问题点。
shell # top
top - 11:04:55 up 97 days, 19:37, 2 users, load average: 0.63, 0.19, 0.06
Tasks: 111 total, 2 running, 109 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 97.9 id, 0.0 wa, 0.7 hi, 0.0 si, 0.0 st
MiB Mem : 1826.7 total, 101.3 free, 1066.2 used, 659.1 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 610.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1553087 mysql 20 0 1199896 450476 20140 S 0.0 24.1 48:12.09 mysqld
1758836 mysql 20 0 1109004 444076 44020 S 1.4 23.7 4:35.92 mysqld
556 root 20 0 236752 81160 74676 S 0.0 4.3 3:04.30 systemd-journal
top显示系统的CPU负载情况。指标如下:
top - 11:04:55 up 97 days, 19:37, 2 users, load average: 0.63, 0.19, 0.06
指标 | 说明 |
---|---|
11:04:55 | 表示当前系统时间 |
up 97 days, 19:3 | 表示系统运行时间 |
2 users | 表示当前登录用户人数 |
load average | 表示1分钟/5分钟/15分钟 系统负载情况 对于单核cpu 1.0 表示满负载 |
备注:
这里关键指标load average平均负载。把它比喻成是一条单向马路,把CPU任务比作汽车(假设系统是单CPU单内核):
结合具体情况具体分析,单核场景下(来自互联网,写的很好):
在系统负载方面,多核CPU与多个CPU效果类似,所以考虑负载时,必须考虑这台服务器有几个CPU、每个CPU有几个核心。然后,把系统负载除以总的核心数,只要每个核心的负载不超过1.0,就表明服务器正常运行。通常需要先看15分钟load,如果load很高,再看5分钟和1分钟负载,查看是否有下降趋势。
通过这些指标,可以了解MySQL并发能力情况和执行语句情况。Load高说明,有可能存在以下情况:
Tasks: 111 total, 2 running, 109 sleeping, 0 stopped, 0 zombie
指标 | 说明 |
---|---|
Tasks | 表示进程情况 |
111 total | 总任务数 |
2 running | 运行进程数 |
109 sleeping | 当前睡眠状态数量 |
0 stopped | 停止进程数量载 |
0 zombie | 僵尸进程数量 |
备注
主要看running执行,zombie僵死进程是否存在。这些任务有可能卡着资源不释放等问题。在MySQL里体现存在一些备份任务 或则 hang住的进程存在,大批量的数据导出导入。
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 97.9 id, 0.0 wa, 0.7 hi, 0.0 si, 0.0 st
指标 | 说明 |
---|---|
%Cpu(s): | 表示这行表示cpu状态 |
0.3 us: | 用户空间 |
0.7 sy: | 内核空间 |
0.0 ni: | 用户定义的优先级 |
98.9 id: | 空闲 |
0.0 wa: | 等待IO的CPU百分比 |
0.0 hi: | 硬中断 |
0.0 si: | 软中断 |
0.1 st: | 虚拟机 |
备注
这里所有指标都有很大意义。
各内存使用情况。
MiB Mem : 1826.7 total, 101.3 free, 1066.2 used, 659.1 buff/cache
指标 | 说明 |
---|---|
KiB Mem: kib | 表示单位 mem表示物理内存 |
total: | 总量 |
free: | 空闲 |
used: | 已使用 |
buff/cache: | 内核缓存用量 |
备注
主要考虑MySQL使用的内存使用是否过高,还有内存泄漏 或 参数和内存策略(vm.swappiness)设置不合理,导致CPU不停的整理碎片情况。
使用swap可能导致数据库响应缓慢,swap是硬盘上的一个区域,用于当物理内存不足时暂时存储数据。同时从慢速的硬盘上读取数据。
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 610.6 avail Mem
指标 | 说明 |
---|---|
KiB Swap: kib | 表示单位 Swap表示交换区 |
total: | 总量 |
free: | 空闲 |
used: | 已使用 |
avail Mem: | 可用内存,这部分指标与Swap没关系 |
备注
在MySQL场景中,体现在内存不足,内核参数(vm.swappiness)设置不合理,numa架构问题,内存泄漏等问题导致的。
每个应用都有对应进程ID,同时显示占有的资源情况。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1553087 mysql 20 0 1199896 450476 20140 S 0.0 24.1 48:12.09 mysqld
指标 | 说明 |
---|---|
PID: | 进程ID |
USER: | 进程用户 |
PR: | 优先级 |
NI: | NICE 值 取值-20 到19 数值越小优先级越高 |
VIRT: | 进程使用的虚拟内存量 |
RES: | 进程使用的驻留内存量 |
SHR : | 共享内存量 |
S: | 进程状态 S 代表睡眠状态 R代表运行状态 Z 代表僵尸状态 T 停止或者跟踪状态 |
%CPU: | CPU使用率 |
%MEM: | 内存使用率 |
TIME+: | CPU总时间 |
COMMAND: | 具体软件名 |
备注
通过MySQL的进程,可以查看MySQL实际使用的CPU和内存情况。也可以进一步使用top -H -p
查看CPU飙高的mysql线程,具体SQL语句。
#top -H -p 1821
top - 21:04:24 up 10 min, 1 user, load average: 0.00, 0.02, 0.04
Threads: 31 total, 0 running, 31 sleeping, 0 stopped, 0 zombie
%Cpu(s): 90.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867048 total, 390212 free, 1227176 used, 249660 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 454824 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1942 mysql 20 0 12.327g 1.082g 12004 S 90 60.8 0:00.26 mysqld
1821 mysql 20 0 12.327g 1.082g 12004 S 90 60.8 0:13.02 mysqld
1924 mysql 20 0 12.327g 1.082g 12004 S 90 60.8 0:00.00 mysqld
根据具体PID,定位问题SQL
SELECT a.THREAD_OS_ID,b.id,b.user,b.host,b.db,b.command,b.time,b.state,b.info
FROM performance_schema.threads a,information_schema.processlist b
WHERE b.id = a.processlist_id and a.THREAD_OS_ID=;
Top命令是Linux系统下分析MySQL资源使用情况的利器。其默认安装、使用简便的特点,在日常工作中不可或缺的工具之一。通过使用Top命令对监控和优化MySQL性能有很大的意思。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com