下图1为 Linux 性能优化排查工具的总结
图1
诊断 CPU 工具
查看 CPU 核数
总核数 = 物理CPU个数 X 每颗物理CPU的核数总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
查看物理CPU个数cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数)cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数cat /proc/cpuinfo| grep "processor"| wc -l或者 top 后按 1,第三行开始数有几个CPU 就是几个逻辑CPU 如图2只有一个逻辑CPU0
图2
top
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
语法
top [选项]
选项
-b:以批处理模式操作;-c:显示完整的治命令;-d:屏幕刷新间隔时间;-I:忽略失效过程;-s:保密模式;-S:累积模式;-i:设置间隔时间;-u:指定用户名;-p:指定进程;-n:循环显示的次数。
图3
在 Linux 命令终端输入 top 后屏幕将会显示如图3显示的信息,那么这些信息显示的是什么意思呢?下面将针对每行信息进行回答。
如下图4所示,红框区域所显示信息为系统统计信息,黄框显示信息为进程信息
图4
系统统计信息
第一行:top - 02:17:40 up 53 days, 5:15, 1 user, load average: 0.02, 0.04, 0.01
02:17:40表示系统当前时间。
up 53 days, 5:15up 是 uptime 的意思表示当前系统运行的时长,图4 系统运行时长为 53天5小时15分钟。
1 user就很简单了表示当前只有一个用户连接。
load average是看性能的时候比较重要的一个指标表示系统负载,也就是任务队列的平均长度,后面三个数分别表示1分钟、5分钟、15分钟。当这个值超过1的时候需要检查系统是否出现异常,这个值当超过5的时候基本上系统已经处于死机状态。
第二行:Tasks: 119 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
用于统计系统上进程信息,119 total 表示系统中总进程数为119,1 running 表示当前正在运行的进程有一个, 118 sleeping 表示当前休眠的进程有 118 个, 0 stopped 表示当前停止的进程, o zombie 表示僵尸进程
第三行:Cpu(s): 0.3%us, 0.7%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
这里默认显示所有 CPU 的总状态,按下 1 键即可显示所有逻辑 CPU 状态。
us(userspace) 表示用户空间占用CPU时间百分比。sy 表示内核空间占用CPU时间百分比。明白 ni 之前需要先了解一个知识点,Linux 系统通过 nice 值来设置进程优先级 nice 值越高优先级越低,nice 可以被手动设置, ni 在这里就表示被手动设置过 nice 值的进程占用 CPU 时间百分比。id 就是 idle 表示 CPU 空闲时间的百分比,wa 就是 waiting 的意思表示 CPU 在等待 I/O 上花费的时间百分比,hi 全称是 hardware interrupts 表示 CPU 处理硬件中断花费的时间百分比,比如在键盘上敲一个键。si 全称是 software interrupts 软件通过发出特殊 CPU 指令中断,表示 CPU 在处理软件中断花费的时间百分比。 st 全称是 steal time(被偷走的时间) CPU 花费在虚拟机上的时间百分比。
第四行:Mem: 520132k total, 254340k used, 265792k free, 24916k buffers
Mem 就是内存信息,其他都是字面意思
total — 物理内存总量
used — 使用中的内存总量
free — 空闲内存总量
buffers — 缓存的内存量
第五行:Swap: 135164k total, 7176k used, 127988k free, 105748k cached
swap交换分区信息
total — 交换区总量
used — 使用的交换区总量
free — 空闲交换区总量
cached — 缓冲的交换区总量
系统进程信息
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 — 进程名称(命令名/命令行)
排查技巧
通过 top –H -p 查看运行时间较长线程