CPU性能分析
CPU性能常用分析工具有vmstat、uptime、mpstat等
命令:vmstat
这个命令含义本是显示虚拟内存状态,但它可以报告系统整体状态
语法:vmstat [-V] [-n] [delay [count]]
参数:
-n:输出的头部信息仅显示一次
delay:表示两次输出的间隔时间
count:表示统计的次数
- 例:表示每五秒输出一次信息,输出三次
[root@centos7 ~]# vmstat 5 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 3421504 2136 361196 0 0 26 16 73 53 4 0 96 0 0 0 0 0 3421356 2136 361228 0 0 0 0 42 72 0 0 100 0 0 0 0 0 3421356 2136 361228 0 0 0 1 46 76 0 0 100 0 0
- procs:表示队列和等待时间
r:表示运行和等待CPU时间片的进程数(如果这个值长期大于系统CPU个数,说明CPU不足) b:表示等待资源的进程数,如正在等待i/o、内存交换等。
- memory:表示物理内存状态
swpd:表示切换到内存交换区的内存数量,单位为KB。(如果swpd的值不为0,或者比较大,只要si、so值长期为零0,就不用担心。) free:表示当前空闲的物理内存数量。 buff:表示buffers cached的内存数量,一般对块设备的读写才需要缓冲。 cache:表示page cached的内存数量,一般作为文件系统cached。(如果cache值较大,说明cached文件数较多,如果此时i/o中bi比较小,说明文件系统效率比较好。)
- swap:显示交换分区的使用状态
si:表示由磁盘调入内存,也就是内存。如果内存进入内存交换区的数量 so:表示由内存调入磁盘,也就是内存交换区进入内存的数量 分析:(一般情况下,si、so值都为零。如果si、so值长期不为零,则表示系统内存不足,需要增加系统内存。)
- io:显示磁盘读写状态
bi:表示从块设备入数据的总量(即读磁盘,单位KB/s)。 bo:表示写入到块设备的数据总量(即写磁盘,单位KB/s)。 分析:(设置bi+bo参考值为1000,如果超过1000,而且wa指较大,则表示系统磁盘i/o有问题,应该考虑提高磁盘的读写性能。)
- system:显示采集间隔内发生的中断数
in:表示在某一时间间隔中观测到的每秒设备中断数。 cs:表示每秒产生的上下文切换次数。
- cpu:显示CPU的使用状态
us:显示了用户进程消耗的CPU时间百分比。 分析:(us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,则需要考虑进行优化。) sy:显示了内核进程消耗的CPU时间百分比。 分析:(sy的值比较高时,说明内核消耗的CPU资源很多。如果us+sy大于80%。说明可能存在CPU资源不足的情况。) id:显示了CPU处于空闲状态的时间百分比。 wa:显示了i/o等待所占用的CPU时间百分比,wa值越高,说明i/o等待越严重。 分析:(wa的参考值为20%,如果wa值超过20%,说明i/o等待严重。原因可能是磁盘大量随机读写造成,也可能是磁盘或者磁盘控制器的宽带瓶颈造成的。)
命令:uptime
uptime是监控系统性能最常用的一个命令。主要用来统计系统当前的运行状况。
以下这条命令输出的信息依次为:系统时间、系统从开机开始运行的时间、系统目前有多少登录用户、系统在一分钟内、五分钟内、15分钟内平均负载。
[root@centos7 ~]# uptime 19:51:32 up 2:20, 2 users, load average: 0.00, 0.01, 0.04
需要注意的地方是load average这个输出值,这三个值的大小,一般不能大于系统CPU的个数。
例如,本书初中系统有两个CPU,如果三个数值长期大于2,说明CPU很繁忙,负载很高。相反,如果这个数值远远小于2,说明CPU很空闲。
命令:mpstat
这个命令是一个CPU实时状态监控工具。是通过/proc/stat里面的状态信息来进行统计的,他可以查看多核CPU中每个计算核的统计数据。
语法:mpstat [-P {cpu|ALL}] [internal] [count]
参数:
[-P {cpu|ALL}]:表示监控哪个CPU,第一颗CPU数值为0
internal:采集的间隔时间
count:采集的次数
[root@centos7 ~]# mpstat 3 2 Linux 3.10.0-1160.el7.x86_64 (centos7) 2022年01月04日 _x86_64_ (2 CPU) 20时06分23秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 20时06分26秒 all 0.17 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.67 20时06分29秒 all 0.00 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.83 平均时间: all 0.08 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.75
以下为输出中每列的含义:
- CPU:处理器的ID
- %usr:显示用户进程消耗的CPU时间百分比
- %nice:显示了运行正常进程所消耗的CPU时间百分比
- %sys:显示了系统进程消耗的CPU时间百分比
- %iowait:显示了i/o等待所占用的CPU时间百分比
- %irq:显示了硬中断时间占用的CPU时间百分比
- %soft:显示了软中断时间占用的CPU时间百分比
- %steal:显示了在内存相对紧张的环境下page in强制对不同的页面进行的steal操作
- %guest:显示了运行虚拟处理器时CPU花费时间的百分比
- %gnice:显示了运行带有nice优先级的虚拟CPU所花费的时间百分比
- %idle:显示了CPU处在空闲状态的时间百分比
分析 :当%idle值较低时,应该是CPU不足的问题。当%iowait数值较高时,应该是当前负载下i/o子系统出现了问题。
内存性能分析
内存性能分析的常用工具有free、smem等。
命令:free
free是监控Linux内存使用状况最常用的指令。
[root@centos7 ~]# free total used free shared buff/cache available Mem: 4026156 243776 3411332 11868 371048 3550276 Swap: 2097148 0 2097148
此命令输出中显示了系统的各种内存状态,包括了物理内存和swap。
以上信息每列的内容分别为总内存(total)、使用内存(used)、空闲内存(free)、共享内存(shared)、系统缓存(buff/cache)、可用内存(available)
分析:一般来说,可用内存大于70%时,说明资源非常充足;小于20%时,说明资源紧缺,可扩容内存。
命令:smem
这个命令可以显示内存使用情况报告,他可以提供多种报告。
这个命令需要单独安装:
[root@centos7 ~]# yum -y install epel-release [root@centos7 ~]# yum -y install smem python-matplotlib python-tk
语法:smem [参数]
-k:用来显示内存单位
-p:以百分比的形式显示内存占用
-u:显示每个用户占用的内存信息。
-s:表示排序。
[root@centos7 ~]# smem -k -s uss PID User Command Swap USS PSS RSS 1024 root /sbin/agetty --noclear tty1 0 172.0K 204.0K 848.0K 965 root /usr/sbin/irqbalance --fore 0 376.0K 432.0K 1.3M 860 root /sbin/auditd 0 544.0K 570.0K 1.1M 522 root /usr/sbin/lvmetad -f 0 596.0K 640.0K 1.5M
上面相关的内容最后几列的内容分别是:
- RSS:是最常用的内存指标,表示进程占用的物理内存大小。这个值中包含了共享内存
- PSS:所有使用某共享库的程序均分该共享库占用的内存嗯。简单来说就是将共享内存的大小进行平均后,分摊到各个进程。
- USS:建成独自占有的内存,只计算进程独自占用的内存大小,不包含任何共享的部分。嗯呢。东莞r PS
通过这个命令,可以清晰的看到每个进程占用了多少内存资源,以及占用是否合理。
磁盘性能分析
磁盘性能分析的常用工具有iotop、iostat等
命令:iotop
这是一个用来监视磁盘i/o使用状况的top类工具,可监测到某一个程序使用的磁盘i/o的实时信息。
选项:
-p:指定进程ID,显示该进程的i/o情况
-u:指定用户名,显示该用户所有进程的i/o情况
-P:只显示进程
-k:表示以千字节显示
-t:表示在每一行前添加一个当前时间
iotop Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 1027 be/4 polkitd 0.00 B/s 0.00 B/s 0.00 % 0.00 % polkitd --no-debug 4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H] 517 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % lvmetad -f
命令:iostat
这个命令是对系统的磁盘i/o操作进行监视。主要显示磁盘读写操作的统计信息。
yum -y install sysstat
安装完成后,系统将会多出三个命令:iostat、sar、mpstat
[root@centos7 ~]# iostat -d Linux 3.10.0-1160.el7.x86_64 (centos7) 2022年01月05日 _x86_64_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 3.32 63.47 6.58 102745 10649 scd0 0.01 0.64 0.00 1028 0 dm-0 2.14 56.08 5.31 90778 8601 dm-1 0.05 1.36 0.00 2204 0
以上的每项输出解释如下:
- KB_read/s:表示每秒读取的数据块数
- KB_wrth/s:表示每秒写入的数据快数
- KB_read:表示读取的所有块数
- KB_wrth:表示写入的所有块数
如果每秒写值很大,表示磁盘的写操作很频繁,可以优化磁盘或优化程序。如果每秒写的值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存进行操作。
网络性能分析
网络性能分析的常用工具有ping、traceroute和mtr等
命令:ping
如果网络反应慢,或连接中断。可以通过ping来测试网络连通情况。
[root@centos7 ~]# ping www.baidu.com PING www.a.shifen.com (110.242.68.3) 56(84) bytes of data. 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=1 ttl=128 time=11.4 ms 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=2 ttl=128 time=11.8 ms 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=3 ttl=128 time=12.4 ms 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=4 ttl=128 time=11.4 ms ^C --- www.a.shifen.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3012ms rtt min/avg/max/mdev = 11.409/11.805/12.443/0.411 ms
在以上这个输出中,time值显示了两台主机间的网络延迟情况,如果此值很大,则表示网络延迟很大。
packet loss表示网络丢包率,这个值越小,表示网络质量越高。