要进行性能分析,需要在性能脚本运行时,对服务器进行性能监控
常用的性能监控命令,当然也可以通过性能平台来进行查看。
常用的性能监控命令
详细查看这里
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筛选。 -
-u
:按用户名筛选。 -
-i
:显示网络连接信息。 -
-t
:仅显示进程ID。 -
-F
:指定自定义的输出格式。
lsof命令的输出结果包含以下字段的信息:
-
COMMAND
:打开文件的进程名称。 -
PID
:进程ID。 -
USER
:进程的所有者。 -
FD
:文件描述符,用于表示文件的访问模式(例如,读取、写入、追加等)。 -
TYPE
:文件类型,如常规文件(REG)、目录(DIR)、套接字(SOCK)等。 -
DEVICE
:文件所在的设备名称。 -
SIZE/OFF
:文件大小或文件偏移量。 -
NODE
:文件的节点号。 -
NAME
:打开文件的路径和名称。
显示指定进程打开的文件
lsof -p
显示网络连接信息:
lsof -i
仅显示进程ID:
lsof -t
指定自定义的输出格式:
lsof -F
系统性能瓶颈
系统性能瓶颈分类
-
CPU瓶颈:
- 当CPU处理能力达到上限时,可能会出现CPU瓶颈。这通常发生在CPU密集型的应用程序中,如大量的计算或处理逻辑。
-
内存瓶颈:
- 如果系统没有足够的RAM来支持正在运行的程序,会导致频繁的硬盘页面交换,从而产生内存瓶颈。
-
磁盘I/O瓶颈:
- 当磁盘读写速度跟不上应用程序对I/O的需求时,就会出现磁盘I/O瓶颈。例如,数据库操作、文件读写密集型的应用程序可能会导致这类瓶颈。
-
网络瓶颈:
- 网络瓶颈发生在数据在网络中传输时速度不够快,导致应用程序响应缓慢或网络拥堵。
-
软件瓶颈:
- 无效的算法或不佳的程序设计也会造成性能瓶颈,例如循环内的重复计算、不必要的数据库查询或高复杂度的操作。
-
数据库瓶颈:
- 这包括了不合理的数据库结构设计、索引缺失、不合理的锁机制或查询效率低下。
-
并发瓶颈:
- 当系统无法有效地处理多个并发请求时,如线程或进程竞争资源导致的同步阻塞,也会出现性能瓶颈。
-
系统配置瓶颈:
- 不合理的系统配置,例如不当的内核参数设置、错误的网络配置,也可能成为性能瓶颈。
-
架构瓶颈:
- 系统架构设计不合理,如无法有效地进行水平扩展,服务组件间通信效率低下等,也可能引起瓶颈。
系统性能瓶颈定位
CPU瓶颈定位
常见的CPU瓶颈产生的因素
- 处理器速度:处理器的时钟频率较低可能导致无法快速处理任务。
- 核心数量:单核或少量核心的处理器可能无法有效地处理多线程或多任务操作。
- 缓存大小:CPU内的缓存较小可能导致频繁的内存访问,降低处理速度。
- 并发线程过多:过多的并发线程可能导致处理器资源分配不足,线程竞争变得激烈。
- 单线程性能:某些应用程序可能未能利用多核心优势,只能在单个核心上运行,这可能会导致该核心成为瓶颈。
- 不良的代码优化:未经优化或编写不良的软件可以导致处理器资源浪费,如无限循环、过度复杂的算法等。
- 系统过热:若CPU过热,可能会自动降频以防损坏,这会减少其性能。
- 外围设备速度:IO设备速度慢(如硬盘驱动器)可能导致CPU等待数据,从而减慢速度。
- 前端/后端瓶颈:CPU的前端负责指令获取和解码,后端负责执行和写回。任何一端的延迟都会影响整体性能。
- 多任务处理:系统上运行的进程和应用程序数量过多,超出了CPU的处理能力。
- 中断和上下文切换:频繁的中断和上下文切换会增加CPU的开销,导致有效计算时间减少。
1. top
命令:top
这个命令会提供实时视图,显示系统的动态。
-
关注参数:
-
%Cpu(s)
:这一行显示了不同类型的CPU使用率,其中:-
us
:用户进程占用CPU的百分比。 -
sy
:系统进程占用CPU的百分比。 -
id
:空闲CPU百分比。
-
-
PID
、%CPU
、COMMAND
:查看特定进程的CPU使用情况。
-
-
示例: 如果
top
显示us
和sy
的值很高,你的CPU可能正忙于用户和系统进程。如果id
值很低(比如小于10%),那可能表明CPU资源不足。
2. vmstat
命令:vmstat [delay] [count]
delay
是更新的间隔秒数,count
是更新的次数。
-
关注参数:
-
r
:等待运行的进程数。 -
us
、sy
:用户和系统CPU时间的百分比。 -
id
:空闲CPU时间的百分比。
-
-
示例:
vmstat 1 5
这会每秒报告一次系统状态,共报告五次。如果
r
的值持续高,说明有很多进程等待CPU资源。如果id
值很低,说明CPU资源利用率很高。
3. mpstat
命令:mpstat -P ALL [delay] [count]
这个命令报告关于所有CPU的活动,非常适合多核CPU。
-
关注参数:
-
%usr
:用户态的CPU使用率。 -
%sys
:系统态的CPU使用率。 -
%iowait
:等待I/O完成的CPU时间百分比。 -
%idle
:空闲时间百分比。
-
-
示例:
mpstat -P ALL 1 5
这将显示所有CPU核心的状态,每秒更新一次,共计五次。如果
%usr
和%sys
值高,且%idle
低,可能表示CPU瓶颈。
4. iostat
命令:iostat -c [delay] [count]
虽然iostat
主要用于监控I/O,它也提供了CPU使用情况。
-
关注参数:
-
%user
:用户模式CPU使用率。 -
%system
:系统模式CPU使用率。 -
%iowait
:I/O请求等待时间的CPU百分比。 -
%idle
:空闲CPU时间百分比。
-
-
示例:
iostat -c 1 5
这将每秒报告一次CPU使用情况,共五次。如果
%iowait
长时间高,则可能是I/O瓶颈影响了CPU效率。
5. pidstat
命令:pidstat [options] [interval] [count]
pidstat
是对单个进程的CPU使用情况进行监控。
-
关注参数:
-
%CPU
:单个进程的CPU使用率。 -
PID
:进程的ID。
-
-
示例:
pidstat -u 1 5
这将每秒报告一次所有进程的CPU使用情况,共五次。这有助于确定哪些特定进程可能正在消耗过多的CPU资源。
内存瓶颈定位
造成性能瓶颈的因素
- 内存容量不足:当运行的应用程序或服务需要的内存总量超过实际可用内存时。
- 内存带宽不足:即使内存容量足够,但若内存的数据传输速度跟不上CPU的处理速度,也会形成瓶颈。
- 内存访问延迟:CPU等待从内存读取数据或向内存写入数据的时间过长。
- 内存碎片:长时间运行系统后,内存可能会产生碎片,影响内存分配效率。
- 多任务竞争:多个应用程序或多个进程同时运行,竞争同一内存资源。
- 不良的内存管理:程序中存在内存泄露、频繁的垃圾回收等问题。
1、free
free
命令显示了系统中未使用和已使用的内存量及总交换空间。
-
参数:
-
-m
: 以MB为单位显示。 -
-g
: 以GB为单位显示。 -
-h
: 以可读性高的格式显示。
-
-
使用示例:
free -h
-
返回值解读:
-
total
: 表示系统的总内存。 -
used
: 表示已使用的内存。 -
free
: 表示未被使用的内存。 -
shared
: 表示多个进程共享的内存。 -
buff/cache
: 表示被缓冲和缓存使用的内存。 -
available
: 表示可用的内存。
-
-
返回值变化分析: 如果
us服务器托管ed
接近total
且available
很少,表明可能存在内存瓶颈。
2、vmstat
vmstat
命令报告关于进程、内存、分页、块IO、陷阱、以及CPU活动的信息。
-
参数:
-
1
: 每隔一秒刷新显示一次数据。
-
-
使用示例:
vmstat 1
-
返回值解读:
-
procs
下的r
: 表示等待运行的进程数。 -
memory
下的free
: 表示空闲的内存量。 -
swap
下的si
和so
: 表示每秒从磁盘交换进来和交换出去的内存量,如果这两个值很高,则说明使用了大量的交换空间。 -
io
下的bi
和bo
: 表示每秒从设备(块)读取和向设备写入的数据量。 -
system
下的in
和cs
: 表示每秒中断和上下文切换的次数。 -
cpu
下的us
,sy
,id
,wa
: 分别表示用户态、内核态、空闲和等待I/O的CPU时间百分比。
-
-
返回值变化分析: 如果
si
和so
值持续较高,表示内存可能不足,系统在频繁使用交换空间。
3、top
top
命令提供了一个实时更新的系统状态动态视图,包括CPU和内存使用情况。
-
参数: 通常不需要特定参数,直接运行即可。
-
使用示例:
top
-
返回值解读:
-
Mem
和Swap
: 显示当前内存和交换空间的使用情况。 -
%MEM
: 显示各个进程使用的内存百分比。 -
RES
: 显示各个进程使用的物理内存量。
-
-
返回值变化分析: 如果某个进程的
%MEM
和RES
值持续较高,这可能表明此进程是造成内存瓶颈的原因。
磁盘I/O瓶颈
磁盘I/O瓶颈产生的因素
- 硬件限制
- 文件系统结构
- 磁盘碎片
- 并发访问数
- 错误配置的存储系统
- 不合理的应用程序I/O模式
1. iostat
iostat
命令用于监视系统输入/输出设备的负载。
-
参数:
-
-x
: 显示扩展统计信息。 -
-m
: 输出以MB为单位。 -
1
: 每隔1秒更新一次数据。
-
-
使用示例:
iostat -xm 1
-
返回值解读:
-
%util
: 显示设备的带宽使用百分比,接近100%时表明磁盘带宽可能成为瓶颈。 -
r/s
,w/s
: 每秒完成的读写次数。 -
rMB/s
,wMB/s
: 每秒读取和写入的数据量(以MB为单位)。 -
await
: 每次I/O请求的平均等待时间(毫秒)。
-
-
返回值变化分析: 如果
%util
很高并且await
或者r/s
和w/s
等指标也较高,可能表明磁盘I/O成为瓶颈。
2. vmstat
vmstat
命令可以报告关于系统内存、进程、中断、CPU活动以及I/O统计。
-
参数:
-
1
: 更新频率。
-
-
使用示例:
vmstat 1
-
返回值解读:
-
bi
,bo
: 块设备(通常是磁盘)每秒接收和发送的块数量。 -
wa
: CPU等待I/O完成的时间百分比。
-
-
返回值变化分析: 如果
wa
较高,表明CPU经常在等待I/O操作,可能是磁盘I/O瓶颈的一个迹象。
3. sar
sysstat
包中的sar
命令可以用来收集、报告或保存系统活动信息。
-
参数:
-
-d
: 显示磁盘活动统计。 -
-p
: 显示易于理解的设备名称。 -
1
: 每1秒采集一次数据。
-
-
使用示例:
sar -dp 1
-
返回值解读:
-
%util
: 同iostat中的解释。 -
tps
: 设备每秒的传输次数,较高值表明高I/O请求率。 -
rd_sec/s
,wr_sec/s
: 每秒读取和写入的扇区数。
-
-
返回值变化分析: 如果
%util
接近或者达到100%,tps
和传输速率(rd_sec/s
,wr_sec/s
)也很高,可能表明磁盘I/O受到限制。
4. iotop
iotop
是一个实时的I/O监视工具,类似于top
命令。
-
参数:
-
-o
: 只显示有实际I/O操作的进程。
-
-
使用示例:
iotop -o
-
返回值解读:
-
IO>
: 进程的I/O使用百分比。 -
SWAPIN
: 该进程从交换区读取数据的速率。 -
DISK WRITE
: 进程的磁盘写操作速率。
-
-
返回值变化分析: 通过监控I/O使用最高的进程,可以帮助定位是哪个进程导致磁盘I/O压力。
5. hdparm
hdparm
命令用于测试磁盘的读取速度。
-
参数:
-
-Tt
: 对磁盘缓存和读取速度进行测试。
-
-
使用示例:
hdparm -Tt /dev/sda
-
返回值解读:
-
Timing buffered disk reads
: 显示磁盘的读取速度。
-
-
返回值变化分析: 如果读取速度显著低于磁盘规格说明书的数据,这可能是一个瓶颈的信号。
6. dstat
dstat
是一个多功能的性能分析工具,可以同时报告CPU、磁盘I/O、网络等系统统计。
-
参数:
-
-d
: 显示磁盘相关的统计。 -
--output
: 将统计输出到文件中。
-
-
使用示例:
dstat -d --output dstat_output.csv
-
返回值解读:
-
read
: 每秒读取的总数据量。 -
writ
: 每秒写入的总数据量。
-
-
返回值变化分析: 数据的持续高读写量可能表明磁盘I/O瓶颈。
网络瓶颈
网络瓶颈产生的因素
- 带宽限制:网络连接的带宽可能不足以支持当前的数据传输需求。
- 网络硬件问题:路由器、交换机或网络适配器性能不足或出现故障。
- 高网络延迟:数据包在网络中的传输时间过长,可能是由于网络拥堵。
- 错误的网络配置:不恰当的路由设置或防火墙规则可能导致流量被不当处理。
- 软件限制:操作系统或应用程序的网络堆栈配置不当可能导致性能问题。
- 恶意软件或DDoS攻击:网络资源被恶意软件或分布式拒绝服务攻击消耗。
一般在性能测试中很少发生性能瓶颈(局域网)
netstat
netstat
命令可以显示网络连接、路由表、接口统计等信息。
-
参数:
-
-tulnp
: 显示TCP、UDP的监听端口和对应程序。
-
-
使用示例:
netstat -tulnp
-
返回值解读:
- 列出了本机监听的端口和相关服务。
软件瓶颈
软件瓶颈通常指软件系统中限制应用性能
导致软件瓶颈的因素
- 算法效率低:使用了时间复杂度高的算法,导致处理慢。
- 资源争用:多个进程或线程争抢CPU、内存等资源。
- 内存泄漏:应用程序没有正确管理内存,导致可用内存逐渐减少。
- 数据库性能问题:索引不当、查询效率低下、死锁等问题。
- 同步与锁:过度使用锁或不恰当的资源同步机制限制了并发。
- I/O瓶颈:磁盘或网络I/O限制了数据的读写速度。
- 配置限制:软件或系统的配置没有根据需求进行优化。
1. top / htop
top
命令可用于显示Linux系统中的任务和系统信息,而htop
是top
的一个增强版本,提供更丰富的界面和功能。
-
参数:
-
-n
: 指定更新次数。
-
-
使用示例:
top -n 1
或者使用
htop
直接启动:htop
-
返回值解读:
- CPU和内存使用率高的进程可能是性能瓶颈的指标。
-
返回值变化分析: 实时监控系统性能和进程状态,查找资源使用异常的进程。
数据库瓶颈
数据库瓶颈造成因素
- 硬件资源限制:CPU、内存、存储或网络带宽不足。
- 不当的索引使用:缺少必要的索引或索引设计不佳会导致查询性能下降。
- 查询效率低:复杂的查询语句或大量的表连接可以减慢查询速度。
- 锁竞争:过多的行级锁或表级锁可能会导致事务等待时间增加。
- 数据库设计:数据库架构和表结构设计不合理可以导致瓶颈。
- 缓存策略:不恰当的缓存设置可能会导致性能问题。
- 并发:过多并发访问时,数据库管理系统可能无法高效处理所有请求。
数据库定位看这里
并发瓶颈
并发瓶颈通常是由于系统无法有效处理同时到来的多个请求而产生的。这种瓶颈的原因可能包括:
- 资源竞争:不同的进程或线程竞争相同资源(如CPU、内存、磁盘I/O)。
- 锁争用:数据库中的行锁或表锁导致事务等待释放锁。
- 线程管理不当:线程或进程池设置不合理(过大或过小)导致系统开销增加或资源未被充分利用。
-
代码同步问题:代码中使用了过多的同步操作(如在Java中的
synchronized
关键字),增加了线程等待时间。 - 网络瓶颈:网络延迟或带宽限制导致数据传输缓慢。
- 数据库连接池:连接池大小设置不当可能导致应用程序无法获得数据库连接。
MySQL
-
SHOW PROCESSLIST 显示当前MySQL服务器上的所有活动线程,可以用来查看是否有长时间运行的查询或锁等待。
SHOW FULL PROCESSLIST;
-
SHOW STATUS 显示服务器状态变量,包括与并发相关的变量,如
Threads_connected
和Threads_running
。SHOW STATUS LIKE 'Threads%';
PostgreSQL
-
pg_stat_activity 查看当前活动的数据库连接和操作,特别注意
state
和wait_event
列。SELECT * FROM pg_stat_activity;
-
pg_locks 查看当前的锁情况,哪些查询正在等待锁。
SELECT * FROM pg_locks WHERE granted = 'f';
Oracle
-
V$LOCK 查看当前数据库锁的情况。
SELECT * FROM V$LOCK WHERE BLOCK = 1;
-
V$SESSION 查看当前会话,包括活动的会话和系统资源使用情况。
SELECT sid, serial#, username, status, osuser FROM v$session;
SQL Server
-
sp_who2 显示当前活动用户会话和锁的信息。
EXEC sp_who2;
-
DMVs 使用动态管理视图(DMVs)检查系统健康状况。
SELECT * FROM sys.dm_os_waiting_tasks WHERE wait_type NOT LIKE '%SLEEP%';
系统命令(适用于Linux)
-
top 显示系统中进程的实时运行情况。
top
-
vmstat 报告关于进程、内存、分页、块I/O、陷阱和CPU活动的信息。
vmstat 1
1
参数表示每秒更新一次。 -
iostat 用于监视系统输入输出设备和CPU的使用情况。
iostat -xz 1
-xz
选项显示扩展信息,1
表示每秒更新一次。 -
netstat 显示网络连接、路由表、接口状态等网络相关信息。
netstat -tulnp
-tulnp
显示TCP/UDP、监听状态的端口和程序信息。
系统配置瓶颈
系统配置瓶颈通常是指由于系统的硬件或软件配置不当导致的性能问题。产生瓶颈的因素可能包括:
- 内存不足:系统的物理内存(RAM)不足,导致频繁的内存交换(swap),增加了磁盘I/O,从而降低了性能。
- CPU资源受限:CPU处理能力达到上限,无法处理更多的并行任务。
- 磁盘I/O瓶颈:磁盘的读写速度成为限制系统性能的因素,尤其是当系统依赖于频繁的磁盘操作时。
- 网络带宽/延迟:网络配置错误或硬件限制导致数据传输速度慢,或网络包延迟高。
- 错误的系统参数配置:例如,错误地设置了内核参数、文件系统挂载选项或网络配置,导致性能下降。
- 软件配置不当:服务或应用程序的配置不恰当,如数据库、web服务器等,可能导致低效的处理或资源使用。
定位系统配置瓶颈通常涉及以下步骤:
-
监控和度量:首先使用系统监控工具如
top
、htop
、vmstat
、iostat
、netstat
、sar
等来检测系统资源的使用情况。 -
基准测试:进行基准测试来确定系统在理想状况下的性能表现。这有助于识别当前表现与理想状态之间的差距。
-
分析日志文件:系统日志文件通常会记录错误和警告信息,包括性能相关的问题。
-
调优和测试:对系统配置进行调整后,需要进行测试,以比较性能是否有所提高。
-
使用专业工具:使用专门的性能监控和分析工具,如
New Relic
、Nagios
、Dynatrace
等,可以更深入地分析性能问题。 -
系统升级:如果硬件资源成为瓶颈,可能需要升级硬件。
-
top 或 htop
top
使用这些工具可以查看CPU和内存的使用情况。如果发现CPU使用率长时间为100%,可能表明CPU资源不足。如果内存使用量和交换区(swap)使用量都很高,可能是内存不足。
-
iostat
iostat -xm 5
这条命令每5秒更新一次,提供有关磁盘I/O和CPU使用情况的扩展报告。如果%util接近或持续为100%,表明磁盘I/O可能是瓶颈。
-
vmstat
vmstat 1
每秒更新一次,查看系统的虚拟内存、进程、CPU活动。如果
si
(swap in)和so
(swap out)值不断上升,表明系统可能正遭受内存压力。 -
netstat
netstat -s
显示网络统计信息,可以帮助识别网络配置问题。
-
ulimit
ulimit -a
显示当前用户的资源限制,包括打开文件的最大数量等。资源限制设置不当可能导致系统无法打开足够的文件句柄,从而成为瓶颈。
-
sysctl
sysctl -a
显示或设置内核级别的参数,能够帮助识别和调整系统性能相关的内核参数。
架构瓶颈
架构瓶颈是指由于系统设计不当导致的性能限制,它可以来源于多个层面,包括软件架构设计、数据库设计、系统集成等。产生架构瓶颈的因素包括但不限于:
- 单点故障:系统中的某个关键组件没有冗余,一旦出现问题,整个系统都会受影响。
- 水平扩展能力有限:如果应用程序不能有效地在多个服务器或实例之间分配负载,那么它的扩展性就会成为瓶颈。
- 服务间通信效率低:微服务架构中,服务之间的通信效率低下,可能因服务器托管为网络延迟、错误的服务拆分或过度复杂的服务依赖。
- 数据库设计不当:如数据库索引缺失或不当、查询效率低下、表结构设计不合理等,都会导致数据访问成为瓶颈。
- 同步处理:过度依赖同步处理可能会导致性能问题,特别是当处理耗时操作时。
- 资源争用:多个进程或服务竞争相同资源(如CPU、内存、数据库连接等)时可能引起瓶颈。
- 代码层面问题:如循环中的重复计算、不必要的数据处理、内存泄漏等编码不当的情形。
位架构瓶颈通常需要更全面的方法,可能包括:
-
性能分析:使用性能分析(Profiling)工具来监控应用程序运行时的性能特征,如CPU、内存使用,以及方法调用频率。
-
日志分析:分析应用程序和系统日志,寻找异常模式或错误,这些可能是性能问题的指示。
-
负载测试:模拟用户访问以生成实际工作负载,观察系统在负载下的表现,识别性能瓶颈。
-
追踪和跟踪:使用分布式追踪工具(如Zipkin、Jaeger)来观察服务间的调用链路,分析每个服务调用的延迟。
-
架构审查:定期进行架构审查会议,让团队成员讨论当前架构的问题和潜在瓶颈,并找出可能的改进点。
-
代码审查:定期进行代码审查以发现可能导致性能问题的代码模式。
-
数据库分析:使用数据库分析工具(如慢查询日志、EXPLAIN命令)来定位数据库瓶颈,优化查询和数据库结构。
-
仿真模型:使用仿真或建模工具来评估架构的理论性能极限,发现可能的瓶颈。
-
监控系统:使用系统监控工具(如Prometheus、Grafana、ELK)集中监控应用程序和硬件的性能。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
要进行性能分析,需要在性能脚本运行时,对服务器进行性能监控 常用的性能监控命令,当然也可以通过性能平台来进行查看。 常用的性能监控命令 详细查看这里 top: 进程列表中,是根据cpu的使用率从高到低排序 top命令的语法如下: top [options] 常…