要进行性能分析,需要在性能脚本运行时,对服务器进行性能监控
常用的性能监控命令,当然也可以通过性能平台来进行查看。
常用的性能监控命令
top: 进程列表中,是根据cpu的使用率从高到低排序
top命令的语法如下:
top [options]
常用的top命令选项包括:
-d delay
:设置刷新间隔的时间,单位为秒,默认为3秒。-n iterations
:设置显示的迭代次数,完成指定次数后自动退出。-p pid
:仅显示指定进程ID的信息。-u username
:仅显示指定用户名的进程信息。-o field
:按指定字段进行排序,例如按CPU占用率排序使用-o %CPU
。-O field
:按指定字段进行倒序排序。
top命令的输出结果包括以下几个常见字段:
top
顶部的CPU状态区域的字段含义如下:
us
(user):用户态CPU使用的百分比,表示用户进程消耗的CPU时间。sy
(system):系统态CPU使用的百分比,表示内核进程消耗的CPU时间。ni
(nice):调整过优先级后,用户态CPU使用的百分比。id
(idle):空闲CPU的百分比,表示CPU处于空闲状态的时间。wa
(waiting I/O):等待I/O完成的CPU使用的百分比,表示CPU等待I/O操作完成的时间。hi
(hardware interrupts):硬件中断所消耗的CPU使用的百分比。si
(software interrupts):软件中断所消耗的CPU使用的百分比。st
(stolen):被虚拟化环境(如虚拟机)偷取的CPU使用的百分比。
物理内存(Mem)和交换空间(Swap)相关的字段含义如下:
对于物理内存 (Mem) 字段:
total
:物理内存的总大小。used
:已使用的物理内存大小。free
:剩余的物理内存大小。shared
:被多个进程共享的物理内存大小。buffers
:缓存的物理内存大小,用于加速磁盘访问。cached
:缓存的文件系统数据的物理内存大小。
对于交换空间 (Swap) 字段:
total
:交换空间的总大小。used
:已使用的交换空间大小。free
:剩余的交换空间大小。cached
:缓存的交换空间大小。
top
默认按CPU使用率排序显示进程列表相关的字段含义如下:
PID
:进程ID,表示每个进程的唯一标识符。USER
:进程的所有者,即运行该进程的用户。PR
:进程的优先级。NI
:进程的优先级调整值。VIRT
:进程使用的虚拟内存大小。RES
:进程使用的物理内存大小。SHR
:进程使用的共享内存大小。S
:进程的状态,包括 R (运行)、S (睡眠)、D (不可中断的睡眠)、Z (僵尸进程)、T (跟踪或停止) 等。%CPU
:进程的CPU使用率,表示该进程占用CPU资源的百分比。%MEM
:进程的内存使用率,表示该进程占用系统内存的百分比。TIME+
:进程的累计CPU时间,表示该进程在CPU上运行的总时间。COMMAND
:进程的名称,表示该进程的可执行文件名或命令名。
load average : 负载平均值 显示了1分钟、5分钟、15分钟的平均负载值
top - 15:50:40 up 1 day, 3:25, 1 user, load average: 0.64, 0.81, 0.85
Tasks: 308 total, 1 running, 307 sleeping, 0 stopped, 0 zombie
%Cpu(s): 12.7 us, 2.5 sy, 0.0 ni, 84.5 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15742.4 total, 5037.9 free, 7838.0 used, 2866.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 6562.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
789 root 20 0 313460 69648 27072 S 2.0 0.4 0:15.70 systemd
987 user 20 0 379424 89976 30816 S 1.7 0.6 0:10.82 gnome-ter
1342 user 20 0 355368 47920 30752 S 1.3 0.3 0:06.55 python3
2451 user 20 0 1756948 518668 38952 S 1.0 3.2 1:58.44 chrome
3548 user 20 0 428964 49720 30968 S 0.7 0.3 0:03.28 gedit
1 root 20 0 225344 13220 9640 S 0.3 0.1 0:05.02 systemd
ps 查看当前的进程
获取帮助 命令 --help
- ps -ef |grep 进程名or进程id
ps命令的输出结果通常包括以下几个字段:
UID
:进程所属用户的ID。PID
:进程的ID。PPID
:父进程的ID。C
:进程的CPU占用率。STIME
:进程启动的时间。TTY
:进程所属的终端。CMD
:进程的命令行。
vmstat 对虚拟内存、进程、cpu信息进行监控
vmstat命令的语法如下:
vmstat [delay [count]]
delay
:可选参数,表示两次打印输出之间的时间间隔,单位为秒,默认为2秒。count
:可选参数,表示打印输出的次数,默认为无限次。
vmstat命令的输出结果包括以下几个字段:
procs
:显示进程相关的统计信息,包括运行队列长度、中断数等。r
:运行队列的长度,即正在运行和等待CPU的进程数。b
:处于不可中断(blocked)状态的进程数。
memory
:显示内存相关的统计信息,包括物理内存、虚拟内存和交换空间的使用情况。swpd
:使用的交换空间大小。free
:空闲的物理内存大小。buff
:用作缓冲区的物理内存大小。cache
:用作缓存的物理内存大小。
swap
:显示交换空间的使用情况。si
:每秒从磁盘读入交换空间的数据量。so
:每秒写入磁盘的交换空间数据量。
io
:显示IO相关的统计信息,包括块设备的读写情况。bi
:每秒从块设备读取的块数。bo
:每秒写入块设备的块数。
system
:显示系统相关的统计信息,包括上下文切换次数、中断数等。in
:每秒的中断数。cs
:每秒的上下文切换次数。
cpu
:显示CPU相关的统计信息,包括用户模式和内核模式的CPU使用率。us
:用户空间占用CPU的百分比。sy
:内核空间占用CPU的百分比。id
:空闲CPU的百分比。wa
:等待I/O操作完成的CPU时间的百分比。st
:被虚拟化环境偷取的CPU时间的百分比。
mpstat 查看cpu的监控数据
mpstat命令的语法如下:
mpstat [options] [delay [count]]
[options]
表示可选的命令选项,用于指定显示的统计信息类型或其他操作。
[delay]
表示刷新间隔的时间,单位为秒。它用于指定每次显示统计信息之间的时间间隔。
[count]
表示显示的迭代次数。它用于指定显示统计信息的总次数,达到指定次数后,mpstat命令将自动退出。
常用的mpstat命令选项包括:
-P
:显示每个CPU的统计信息。-u
:显示CPU利用率的统计信息。-I
:显示中断的统计信息。-P ALL
:显示所有CPU的统计信息,包括CPU利用率、中断、上下文切换等。-V
:显示mpstat命令的版本信息。
mpstat命令的输出结果包括以下几个字段:
CPU
:CPU编号。%usr
:用户空间CPU利用率。%nice
:优先级较低的进程CPU利用率。%sys
:内核空间CPU利用率。%iowait
:等待I/O完成的CPU时间。%irq
:处理中断的CPU时间。%soft
:处理软中断的CPU时间。%steal
:被虚拟化环境偷取的CPU时间。%guest
:运行虚拟机客户操作系统的CPU时间。%gnice
:运行虚拟机客户优先级较低的进程的CPU时间。%idle
:空闲CPU时间。
netstat 网络相关监控
netstat是一个网络工具命令,用于显示网络连接、路由表、网络接口状态等信息。它可以帮助用户查看当前系统的网络连接情况,包括正在监听的端口、已建立的连接、网络接口的统计数据等。
netstat命令的语法如下:
netstat [options]
常用的netstat命令选项包括:
-a
:显示所有的网络连接和监听端口。-t
:显示TCP协议相关的连接。-u
:显示UDP协议相关的连接。-n
:以数字形式显示IP地址和端口号。-p
:显示建立连接的进程信息。-r
:显示路由表信息。-s
:显示网络接口的统计信息。
netstat命令的输出结果包括以下几个字段:
Proto
:协议类型,如TCP、UDP。Recv-Q
:接收队列的长度。Send-Q
:发送队列的长度。Local Address
:本地地址和端口号。Foreign Address
:远程地址和端口号。State
:连接状态,如ESTABLISHED、LISTENING等。PID/Program name
:建立连接的进程ID和名称。
sysstat 系统性能监控工具包
sysstat是一个系统性能监控工具包,它包含了一系列的命令和工具,用于收集和分析系统的性能数据。sysstat可以提供关于CPU利用率、内存使用情况、磁盘 I/O、网络流量等方面的统计信息。
iostat 磁盘性能分析时常用
iostat是sysstat工具包中的一个命令,用于显示磁盘I/O统计信息。它可以提供关于磁盘的读写速度、I/O等待时间和磁盘利用率等方面的统计数据。
iostat命令的语法如下:
iostat [options] [interval] [count]
常用的iostat命令选项包括:
-c
:显示CPU利用率统计信息。-d
:显示磁盘I/O统计信息。-p
:显示每个磁盘分区的I/O统计信息。-t
:在输出中包含时间戳信息。-x
:显示更详细的磁盘I/O统计信息,包括每个设备的平均服务时间、队列长度等。
interval
参数指定了数据采样的时间间隔(以秒为单位)
count
参数指定了采样的次数。如果省略这两个参数,则iostat将会持续显示实时的磁盘I/O统计信息。
显示所有磁盘的I/O统计信息:
iostat -d
显示指定磁盘分区的I/O统计信息:
iostat -p <磁盘分区>
显示磁盘I/O统计信息,并以特定时间间隔和采样次数进行采样:
iostat -d 5 10
iostat命令的输出结果包括以下几个字段:
Device
:磁盘设备的名称。tps
:每秒钟的传输率,表示每秒完成的传输次数。kB_read/s
:每秒读取的数据量,以KB为单位。kB_wrtn/s
:每秒写入的数据量,以KB为单位。kB_read
:读取的总数据量,以KB为单位。kB_wrtn
:写入的总数据量,以KB为单位。
sar 提供关于CPU利用率、内存使用情况、磁盘I/O、网络流量等方面的历史统计数据
sar是sysstat工具包中的一个命令,用于收集和报告系统性能统计信息。它可以提供关于CPU利用率、内存使用情况、磁盘I/O、网络流量等方面的历史统计数据。
sar命令的语法如下:
sar [options] [interval] [count]
常用的sar命令选项包括:
-u
:显示CPU利用率统计信息。-r
:显示内存使用情况统计信息。-b
:显示磁盘I/O统计信息。-n
:显示网络流量统计信息。-q
:显示系统平均负载和运行队列长度统计信息。-A
:显示所有可用的统计信息。-s
:指定开始时间,格式为HH:MM:SS。-e
:指定结束时间,格式为HH:MM:SS。
interval
参数指定了采样的时间间隔(以秒为单位)
count
参数指定了采样的次数。如果省略这两个参数,则sar将采集所有可用的统计数据。
显示CPU利用率统计信息:
sar -u
显示内存使用情况统计信息:
sar -r
显示磁盘I/O统计信息:
sar -b
显示网络流量统计信息:
sar -n DEV
显示系统平均负载和运行队列长度统计信息:
sar -q
显示指定时间范围内的CPU利用率统计信息:
sar -u -s 09:00:00 -e 12:00:00
sar命令的输出结果包含了所选择的统计信息。输出结果的具体格式和字段取决于所选择的选项。以下是sar命令常见选项的输出示例
-u
:CPU利用率统计信息的输出示例:
10:00:01 AM CPU %user %nice %system %iowait %steal %idle
10:10:01 AM all 5.01 0.00 3.01 0.20 0.00 91.78
10:20:01 AM all 4.94 0.00 2.98 0.22 0.00 91.85
...
-r
:内存使用情况统计信息的输出示例:10:00:01 AM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 10:10:01 AM 1234567 1234567 1234567 12.34 123456 123456 1234567 12.34 123456 123456 12345 10:20:01 AM 1234567 1234567 1234567 12.34 123456 123456 1234567 12.34 123456 123456 12345 ...
-b
:磁盘I/O统计信息的输出示例:10:00:01 AM tps rtps wtps bread/s bwrtn/s 10:10:01 AM 0.10 0.00 0.10 0.00 0.20 10:20:01 AM 0.11 0.01 0.10 0.10 0.21 ...
-n
:网络流量统计信息的输出示例:10:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10:10:01 AM eth0 0.10 0.20 1.00 2.00 0.00 0.00 0.00 10:20:01 AM eth0 0.11 0.21 1.10 2.10 0.00 0.00 0.00 ...
-q
:系统平均负载和运行队列长度统计信息的输出示例:10:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:10:01 AM 1 1234 0.01 0.02 0.03 0 10:20:01 AM 1 1234 0.01 0.02 0.03 0 ...
dstat 综合性能监控工具,可以提供实时的系统资源使用情况统计信息
dstat是一个综合性能监控工具,可以提供实时的系统资源使用情况统计信息。dstat可以显示关于CPU、内存、磁盘I/O、网络流量等方面的统计数据,可以帮助你全面了解系统的性能状况。
dstat命令的语法如下:
dstat [options] [delay [count]]
常用的dstat命令选项包括:
-c
:显示CPU统计信息。-m
:显示内存统计信息。-d
:显示磁盘I/O统计信息。-n
:显示网络统计信息。-p
:显示进程统计信息。-r
:显示系统负载、内存使用情况以及交换空间使用情况。-s
:显示系统中断和上下文切换统计信息。-t
:在输出中包含时间戳信息。-y
:显示文件系统统计信息。
delay
参数指定了数据采样的时间间隔(以秒为单位)
count
参数指定了采样的次数。如果省略这两个参数,则dstat将会持续显示实时的性能统计信息。
显示实时的 CPU、内存、磁盘 I/O、网络流量统计信息:
dstat
显示指定选项的统计信息,以特定时间间隔和采样次数进行采样
dstat -c -m -d -n -p 5 10
显示系统负载、内存使用情况以及交换空间使用情况:
dstat -r
dstat命令的输出结果依赖于所选择的选项,常见的输出字段包括:
usr
:用户空间CPU使用率。sys
:内核空间CPU使用率。idl
:CPU空闲率。used
:已使用的内存量。free
:空闲的内存量。read
:每秒读取的数据量。writ
:每秒写入的数据量。recv
:每秒接收的数据量。send
:每秒发送的数据量。proc
:正在运行的进程数量。
ss 显示当前系统的套接字(Socket)统计信息
ss是Linux系统中的一个命令行工具,用于显示当前系统的套接字(Socket)统计信息。它提供了比netstat更详细和更快速的套接字信息,并支持更多的过滤和排序选项。
ss命令的基本语法如下:
ss [options]
常用的ss命令选项包括:
-t
:显示TCP套接字信息。-u
:显示UDP套接字信息。-l
:仅显示监听套接字信息。-a
:显示所有套接字信息。-n
:以数字格式显示IP地址和端口号。-r
:显示路由表信息。-s
:显示套接字统计信息。-p
:显示与套接字关联的进程信息。
lsof 显示系统中打开的文件和网络连接的命令行工具
sof是一个用于显示系统中打开的文件和网络连接的命令行工具。它的全称是"list open files"。lsof可以帮助你查看哪些进程打开了哪些文件或网络连接。
sof命令的基本语法如下:
lsof [options]
常用的lsof命令选项包括:
-a
:逻辑与操作,用于指定多个条件。-c <进程名>
:按进程名筛选。-p <进程ID>
:按进程ID筛选。-u <用户名>
:按用户名筛选。-i
:显示网络连接信息。-t
:仅显示进程ID。-F <格式>
:指定自定义的输出格式。
lsof命令的输出结果包含以下字段的信息:
COMMAND
:打开文件的进程名称。PID
:进程ID。USER
:进程的所有者。FD
:文件描述符,用于表示文件的访问模式(例如,读取、写入、追加等)。TYPE
:文件类型,如常规文件(REG)、目录(DIR)、套接字(SOCK)等。DEVICE
:文件所在的设备名称。SIZE/OFF
:文件大小或文件偏移量。NODE
:文件的节点号。NAME
:打开文件的路径和名称。
显示指定进程打开的文件
lsof -p <进程ID>
显示网络连接信息:
lsof -i
仅显示进程ID:
lsof -t
指定自定义的输出格式:
lsof -F <格式>
-
示例:
vmstat 1 5
这会每秒报告一次系统状态,共报告五次。如果
r
的值持续高,说明有很多进程等待CPU资源。如果id
值很低,说明CPU资源利用率很高。
性能监控诊断
系统性能分析思路
系统性能分析因素——cpu
cpu的执行速度与性能好坏在很大程度上决定了系统整体的性能的快慢
系统性能分析因素——内存
当可用的内存太小,系统的进程会被阻塞中,应用将会变得非常缓慢,有时会失去响应,严重会触发系统的内存溢出从而导致应用程序被系统杀死,更严重可能导致系统重启,可以考虑做一些缓存服务器去提升系统性能。
系统性能分析因素——网络
系统应用之间的交互,尤其是在跨机器之间的,都是基于网络的,因此网络带宽、响应时间、网络延迟、阻塞都是影响系统性能的因素。
系统性能分析因素——I/O
I/O读写的性能直接影响系统程序的性能,磁盘I/O是系统中最慢的部分。主要是cpu处理频率叫磁盘的无力操作快几个量级,如果拿读取磁盘和内存的时间比较就是分钟及到毫秒的区别。I/O比较频繁的(读或者写)时候,如果I/O得不到满足就会导致应用阻塞。
系统性能分析因素——总结
系统性能的因素是彼此依赖的,任何一个处于高负载的状态都可能导致其他资源收到影响。
- 系统性能的各个方面确实是互相影响的,因为它们在硬件资源和操作系统层面上是紧密联系的。下面将详细讨论几个主要性能方面之间的相互影响。
-
CPU和内存
- CPU等待内存: 当CPU快速处理完数据后,可能需要等待内存将数据送入处理器进行下一步处理。如果内存速度慢,或者内存带宽有限,将导致CPU闲置,这称为内存瓶颈。
- CPU缓存: 现代CPU有内建的缓存机制,如L1、L2和L3缓存。这些缓存比主内存快得多,可以减少CPU等待内存的时间。如果程序不能有效利用CPU缓存(比如频繁的缓存失效),性能将受到影响。
- 多任务处理: 当多个进程或线程并发运行时,操作系统需要在它们之间切换上下文(context switching),这涉及到保存和恢复CPU寄存器和内存状态。大量的上下文切换会消耗CPU资源,影响系统性能。
-
内存和磁盘I/O
- 交换操作: 当系统的物理内存用尽时,操作系统会使用磁盘空间作为虚拟内存,通过交换(swap)操作来移动数据。磁盘的读写速度远慢于内存,频繁的交换操作会显著降低系统性能。
- 缓存和缓冲: 操作系统通常使用内存中的缓存和缓冲区来减少对磁盘的直接访问。如果内存资源紧张,缓存和缓冲区的大小可能会减小,导致增加对磁盘的I/O操作,降低性能。
-
CPU和磁盘I/O
- I/O等待: CPU在执行数据读写操作时,可能需要等待I/O操作的完成。如果磁盘I/O响应慢,CPU就会在I/O等待状态下浪费时间,这会降低CPU的效率。
- 直接内存访问(DMA): 现代系统中,磁盘I/O操作通常使用DMA,无需CPU介入即可将数据传输到内存中。然而,DMA仍然会占用内存带宽,如果DMA请求很重,可能会影响CPU访问内存的速度。
-
网络I/O和其他资源
- 网络等待: 类似于磁盘I/O,如果一个应用程序依赖于网络数据,当网络响应慢或网络带宽有限时,程序可能会阻塞等待网络I/O的完成,这会影响CPU利用率和整体性能。
- 内存占用: 网络活动可能会产生大量的临时数据,如缓存网页内容或临时文件。这些数据占用了宝贵的内存资源,可能会影响其他内存敏感的应用程序。
系统性能的整体影响
性能问题往往不是孤立存在的。例如,一个内存泄漏可能导致内存不足,这又引发过多的磁盘交换操作,增加了I/O系统的压力,间接影响CPU效率。同理,CPU的性能问题可能导致处理网络请求的延迟增加,影响到网络I/O的效率。
瓶颈阀值分析
cpu定位分析
当系统cpu利用率大于50%,我们需要注意
当系统cpu利用率大于70%,我们需要密切关注(告警)
当系统cpu利用率大于80%,情况就比较严重了(严重)
内存定位分析
当内存使用率大于50%,我们需要注意
当内存使用率大于70%,我们需要密切关注(告警)
当内存使用率大于80%,情况就比较严重了(严重)
网络定位分析
我们通过查看发现收发包的吞吐率达到网卡的最大上限,网络数据报文有因为这类原因而引发的丢包、阻塞等现象,我们都证明了当前网络可能存在瓶颈。(一般我们在性能测试为了减少网络影响都在局域网中)
I/O定位分析
当I/O利用率大于40%,我们需要注意
当I/O利用率大于60%,我们需要密切关注(告警)
当I/O利用率大于80%,情况就比较严重了(严重)
linux系统性能分析思路与实践
系统负载监控分析实践
在linux系统中,系统负载是一个很重要的指标,它的多少决定了系统是否处于忙碌状态,系统开始运行时,cpu的处理颗数已经是一个恒定值,它的大小决定同一时刻,系统可以承受的最大负载。当超过这个负载系统调用就会出现阻塞我们可以通过uptime、top、w等命令帮我们分析系统负载
系统负载监控分析实践
uptime
uptime
命令对于快速了解系统运行状态和负载情况非常有用。它可以帮助系统管理员判断系统是否过载,如果平均负载持续高于CPU核心数,那可能意味着系统正在经历过高的压力。
-
当前时间:显示当前的系统时间。
-
系统运行时间:自系统最后一次启动以来已过去的时间,通常以天、小时和分钟表示。
-
用户数量:当前登录到系统的用户数。
-
平均负载:显示过去1分钟、5分钟和15分钟的平均系统负载。这个数字是系统中活跃进程的平均数量,一个活跃的进程是指正在使用或等待CPU资源的进程。
12:34:56 up 10 days, 2:42, 4 users, load average: 0.00, 0.01, 0.05
12:34:56
是当前的系统时间。up 10 days, 2:42
表示系统已经运行了10天2小时42分钟。4 users
表示当前有4个用户登录系统。load average: 0.00, 0.01, 0.05
分别表示过去1分钟、5分钟和15分钟的平均系统负载。
对于uptime
命令的输出,负载均值可以给出系统活跃进程的大致情况。比如,一个值为1.00的1分钟负载均值在单核心机器上意味着CPU全满,而在四核心机器上意味着CPU的使用率大约为25%。通常,一个健康的系统的负载均值应该小于或等于CPU的核心数。
系统监控分析实践
top命令详解
top也提供了负载平均值的快照,top给出的系统运行时间,反映了当前系统存活了多久,这个字段很好的衡量了系统的高可用性
任务队列信息
- total:系统中总共有多少个进程。
- running:当前正在运行的进程数。
- sleeping:当前处于睡眠状态的进程数。
- stopped:被停止的进程数。
- zombie:僵尸进程数,这些进程已经结束,但其父进程尚未回收其资源。
top - 18:23:34 up 1 day, 3:47, 5 users, load average: 0.85, 0.77, 0.69
18:23:34
- 当前系统时间。up 1 day, 3:47
- 系统运行时间,这里表示系统已经运行了1天3小时47分钟。5 users
- 当前有5个用户登录到系统。load average: 0.85, 0.77, 0.69
- 分别代表过去1分钟、5分钟和15分钟的平均负载。如果这些数字高于你的CPU核心数,它意味着有进程正在等待CPU资源,系统可能处于繁忙状态。