Linux性能检测常用的基本命令

一、uptime

$ uptime
 19:08:17 up 127 days,  3:00,  1 user,  load average: 0.00, 0.01, 0.05     

命令返回的信息:

  • 19:08:17 //系统当前时间
  • up 127 days, 3:00 //主机已运行时间,时间越大,说明你的机器越稳定
  • 1 user // 用户连接数,是总连接数而不是用户数
  • load average: 0.00, 0.01, 0.05 // 系统平均负载,统计最近1,5,15分钟的系统平均负载

二、 dmesg

dmesg命令被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在/var/log/dmesg文件里。

常用选项:
-c:显示信息后,清除ring buffer中的内容;
-s<缓冲区大小>:预设置为8196,刚好等于ring buffer的大小;
-n:设置记录信息的层级。

三、vmstat

vmstat命令的含义为显示虚拟内存状态(“Virtual Memory Statistics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。

常用选项:
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位;

$ vmstat 10 3           表示每行打印10秒内的平均值,只打印3次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 711396   2108 184456    0    0    22     4   53   81  0  0 99  0  0
 0  0      0 711372   2108 184456    0    0     0     0   39   36  0  0 100  0  0
 0  0      0 711372   2108 184456    0    0     0     0   39   35  0  0 100  0  0

输出的信息:
procs(进程)

  • r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1);
  • b: 等待IO的进程数量;

memory(内存)

  • swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能;
  • free: 空闲物理内存大小;
  • buff: 用作缓冲的内存大小;
  • cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小;

swap(交换分区)

  • si: 每秒从交换区写到内存的大小,由磁盘调入内存;
  • so: 每秒写入交换区的内存大小,由内存调入磁盘;
    注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

io(现在的Linux版本块的大小为1kb)

  • bi: 每秒读取的块数;
  • bo: 每秒写入的块数;
    注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

system(系统)

  • in: 每秒中断数,包括时钟中断;
  • cs: 每秒上下文切换数;
    注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

cpu(以百分比表示)

  • us: 用户进程执行时间百分比;
    us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
  • sy: 内核系统进程执行时间百分比;
    sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
  • wa: IO等待时间百分比
    wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
  • id: 空闲时间百分比

四、mpstat

mpstat命令指令主要用于多CPU环境下,它显示各个可用CPU的状态信息。这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

$ mpstat            #输出从系统启动以来的平均值
$ mpstat -P ALL 2 3
#每2秒产生了2个处理器的统计数据报告,一共产生三个interval 的信息,然后再给出这三个interval的平均信息。默认时,输出是按照CPU 号排序。第一个行给出了从系统引导以来的所有活跃数据。接下来每行对应一个处理器的活跃状态。

五、pidstat

pidstat用于打印各个进程对CPU的占用情况,类似top命令中显示的内容。pidstat的优势在于,可以滚动的打印进程运行情况,而不像top那样会清屏。

$ pidstat 1
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2020年03月09日 	_x86_64_  (2 CPU)

20时19分43秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
20时19分44秒     0       495    0.00    0.99    0.00    0.99     0  kworker/0:3
20时19分44秒     0      1038    0.00    0.99    0.00    0.99     1  dockerd
20时19分44秒     0      2308    0.99    0.00    0.00    0.99     1  consul
20时19分44秒     0      2422    0.00    1.98    0.00    1.98     0  pidstat

20时19分44秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
20时19分45秒     0        44    0.00    1.00    0.00    1.00     1  kworker/u256:1
20时19分45秒     0      2308    1.00    0.00    0.00    1.00     1  consul
20时19分45秒     0      2422    1.00    3.00    0.00    4.00     0  pidstat

六、iostat

iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

常用选项:
-c:仅显示CPU使用情况;
-d:仅显示设备利用率;
-k:显示状态以千字节每秒为单位,而不使用块每秒;
-m:显示状态以兆字节每秒为单位;
-p:仅显示块设备和所有被使用的其他分区的状态;
-t:显示每个报告产生时的时间;
-V:显示版号并退出;
-x:显示扩展状态。

$  iostat -x /dev/sda1   #磁盘I/O的详细情况
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	
2020年03月09日 	_x86_64_  (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.57    0.00    1.49    0.05    0.00   97.88

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda1              0.00     0.00    3.57    0.01    45.12     3.75    27.33     0.00    0.09    0.09    1.25   0.08   0.03

详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示:

  • Device:监测设备名称
  • rrqm/s:每秒需要读取需求的数量
  • wrqm/s:每秒需要写入需求的数量
  • r/s:每秒实际读取需求的数量
  • w/s:每秒实际写入需求的数量
  • rsec/s:每秒读取区段的数量
  • wsec/s:每秒写入区段的数量
  • rkB/s:每秒实际读取的大小,单位为KB
  • wkB/s:每秒实际写入的大小,单位为KB
  • avgrq-sz:需求的平均大小区段
  • avgqu-sz:需求的平均队列长度
  • await:等待I/O平均的时间(milliseconds)
  • svctm:I/O需求完成的平均时间
  • %util:被I/O需求消耗的CPU百分比

七、free

free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。

常用选项:
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1821         422         845          10         554        1164
Swap:          2047           0        2047

返回信息:
total:内存总数;
used:已经使用的内存数;
free:空闲的内存数;
shared:当前已经废弃不用;
buffers Buffer:缓存内存数;
available 还可以被 应用程序 使用的物理内存大小;

八、sar

sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。

常用选项:
-A:显示所有的报告信息;
-b:显示I/O速率;
-B:显示换页状态;
-c:显示进程创建活动;
-d:显示每个块设备的状态;
-e:设置显示报告的结束时间;
-f:从指定文件提取报告;
-i:设状态信息刷新的间隔时间;
-P:报告每个CPU的状态;
-R:显示内存状态;
-u:显示CPU利用率;
-v:显示索引节点,文件和其他内核表的状态;
-w:显示交换分区状态;
-x:显示给定进程的状态;

$ sar -n DEV 1
#-n DEV 1:每秒统计一次网络的使用情况
#-n EDEV 1:每秒统计一次错误的网络信息
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2020年03月09日 	_x86_64_	(2 CPU)

20时46分45秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
20时46分46秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20时46分46秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20时46分46秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20时46分46秒     ens33      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20时46分46秒 vethfd45d02      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20时46分46秒 docker_gwbridge      0.00      0.00      0.00      0.00      0.00      0.00      0.00
20时46分46秒   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

返回信息:
IFACE ,网络接口名称;
rxpck/s ,每秒接收到包数;
txpck/s ,每秒传输的报数;(transmit packages)
rxkB/s ,每秒接收的千字节数;
txkB/s ,每秒发送的千字节数;
rxcmp/s ,每秒接收的压缩包的数量;
txcmp/s ,每秒发送的压缩包的数量;
rxmcst/s,每秒接收的组数据包数量;

$ sar -n TCP,ETCP 1
#TCP, 报告关于TCPv4网络流量的统计信息;
#ETCP, 报告有关TCPv4网络错误的统计信息;
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2020年03月09日 	_x86_64_	(2 CPU)

20时49分44秒  active/s passive/s    iseg/s    oseg/s
20时49分45秒      0.00      0.00      0.00      0.00

返回信息:
active/s:发起的网络连接数量;
passive/s:接收的网络连接数量;
retrans/s:重传的数量;

九、top

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

常用选项:
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数;


top交互命令:
h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中;

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached

返回信息:

  • top - 09:44:56[当前系统时间],
  • 16 days[系统已经运行了16天],
  • 1 user[个用户当前登录],
  • load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]
  • Tasks: 145 total[总进程数],
  • 2 running[正在运行的进程数],
  • 143 sleeping[睡眠的进程数],
  • 0 stopped[停止的进程数],
  • 0 zombie[冻结进程数],
  • Cpu(s): 99.8%us[用户空间占用CPU百分比],
  • 0.1%sy[内核空间占用CPU百分比],
  • 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
  • 0.2%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
  • 0.0%hi[],
  • 0.0%st[],
  • Mem: 4147888k total[物理内存总量],
  • 2493092k used[使用的物理内存总量],
  • 1654796k free[空闲内存总量],
  • 158188k buffers[用作内核缓存的内存量]
  • Swap: 5144568k total[交换区总量],
  • 56k used[使用的交换区总量],
  • 5144512k free[空闲交换区总量],
  • 2013180k cached[缓冲的交换区总量],