Linux 服务器的性能诊断工具
查看整机系统性能
top
使用 top
命令,可以查看系统的负载情况,重点关注的是 %CPU
、%MEM
、load average
三个性能指标。
1 | top |
这里的 load average: 0.08, 0.10, 0.12
代表系统的平均负载,三个值分别表示系统在过去 1 分钟、5 分钟、15 分钟内的平均负载情况。通常情况下,这个数值越低越好,因为它反映了系统的负载情况,即系统中正在运行或等待运行的进程数量。值得一提的是,在 top
命令运行期间,按下键盘的数字键 1
,可以看到每个 CPU 的使用率。
htop
使用 htop
命令,通过友好和丰富的界面,可以更方便地查看和管理系统资源的使用情况。
1 | htop |
htop
是一个交互式的系统监控工具,输出结果的格式如下:
1 | 1 [ 0.0%] Tasks: 94, 103 thr; 1 running |
在这个界面中,可以使用键盘上的方向键和其他功能键来浏览进程列表和查看系统资源的使用情况。可以按下 F1
键查看帮助文档,以了解更多操作方法。
uptime
使用 uptime
命令,可以查看系统的运行时间以及系统的平均负载。
1 | uptime |
uptime
是系统性能命令的精简版,输出结果的格式如下:
1 | 15:32:11 up 10 days, 5:17, 2 users, load average: 0.08, 0.10, 0.12 |
查看 CPU 信息
vmstat
使用 vmstat
命令,可以查看进程、内存、I/O 操作和 CPU 活动等统计信息。一般配合两个数字参数来使用,第一个参数是采样的时间间隔(以秒为单位),第二个参数是采样的次数。
1 | vmstat -n 2 3 // 每隔2秒采样一次,一共采样3次 |
vmstat
命令的输出结果格式如下:
vmstat
命令的输出结果说明如下:
procs
r
: 正在运行或等待运行的进程数量。如果这个数字长期高于 CPU 核心数量,则表示系统可能存在 CPU 瓶颈。b
: 在等待 I/O 操作完成时被阻塞的进程数量。如果这个数字持续增长,则表示可能存在磁盘 I/O、网络 I/O 等瓶颈。
memory
:swpd
: 虚拟内存已使用的大小(单位:KB)。即表示被换出到磁盘的内存大小。free
: 空闲内存的大小(单位:KB)。buff
: 用作缓冲区的内存大小(单位:KB)。缓冲区是用于存储文件系统元数据的内存。cache
: 用作缓存的内存大小(单位:KB)。缓存是用于存储文件数据的内存。si
: 每秒从磁盘交换到内存的数据量(单位:KB)。so
: 每秒从内存交换到磁盘的数据量(单位:KB)。
swap
:si
: 每秒从磁盘交换到内存的数据量(单位:KB)。so
: 每秒从内存交换到磁盘的数据量(单位:KB)。
io
:bi
: 每秒从块设备读取的块数量(单位:blocks/s)。bo
: 每秒写入块设备的块数量(单位:blocks/s)。
system
:in
: 每秒中断的数量,包括时钟中断。cs
: 每秒上下文切换的数量(单位:次 /s)。
cpu
us
:用户进程的 CPU 时间占用百分比,us 值越高,用户进程消耗的 CPU 时间越多,如果长期大于50%
,则需要优化程序。sy
:内核进程的 CPU 时间占用百分比。id
:CPU 空闲时间占用百分比。wa
:等待 I/O 操作完成的 CPU 时间占用百分比。st
:被虚拟机监控程序(如 KVM)偷取的 CPU 时间百分比
特别注意
us + sy 的参考值为 80%
,如果 us + sy 大于 80%
,说明系统可能存在 CPU 资源不足的问题。
mpstat
使用 mpstat
命令,可以查看每个 CPU 的统计信息,包括 CPU 的使用情况、上下文切换、中断等。
1 | mpstat -P ALL 5 // 每隔5秒显示一次每个CPU的统计信息 |
pidstat
使用 pidstat
命令,可以查看进程的 CPU、内存、I/O 以及上下文切换等资源的使用情况。
1 | pidstat -u 5 // 每隔5秒显示一次所有进程的CPU使用情况 |
pidstat
命令的输出结果格式如下:
1 | 15时06分35秒 UID PID %usr %system %guest %CPU CPU Command |
pidstat
命令的输出结果说明如下:
PID
:进程 ID。%usr
:用户空间的 CPU 使用率,即进程在用户模式下消耗 CPU 的百分比。%system
:内核空间的 CPU 使用率,即进程在内核模式下消耗 CPU 的百分比。%guest
:虚拟 CPU 使用率,即进程运行虚拟 CPU 的时间百分比。%CPU
:进程在所有 CPU 上的 CPU 使用率。CPU
:进程运行的 CPU 编号。Command
:进程的命令名称。
查看内存信息
free
使用 free
命令,可以查看系统内存的使用情况,包括物理内存、交换空间和系统缓存的使用情况。
1 | free // 输出的内存大小会以KB为单位显示 |
free
命令的输出结果格式如下:
1 | total used free shared buff/cache available |
free
命令的输出结果说明如下:
total
: 总的物理内存大小。used
: 已经被使用的物理内存大小。free
: 可用的物理内存大小。shared
: 被共享的内存大小,一般为 0。buff/cache
: 用作缓存的内存大小。available
: 可用的内存大小。Swap total
: 交换空间的总大小。Swap used
: 已经被使用的交换空间大小。Swap free
: 可用的交换空间大小。
查看硬盘信息
df
使用 df
命令,可以查看磁盘空间的使用情况,包括磁盘的总空间、已用空间、可用空间以及文件系统的挂载点。
1 | df -h // 输出的磁盘空间大小会以人类能看懂的方式(如KB、MB、GB)来显示 |
iostat
使用 iostat
命令,可以查看磁盘 I/O 活动、磁盘分区的吞吐量和响应时间等。
1 | iostat -xdk 2 3 // 每隔2秒采样一次,一共采样3次 |
iostat
命令的输出结果格式如下:
1 | Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util |
iostat
命令的输出结果说明如下:
Device
:磁盘或分区的设备名。rrqm/s
:每秒钟合并的读取请求。wrqm/s
:每秒钟合并的写入请求。r/s
:每秒钟完成的读取请求次数(独立请求)。w/s
:每秒钟完成的写入请求次数(独立请求)。rkB/s
:每秒从磁盘读取的数据量,单位为 KB/s。wkB/s
:每秒写入到磁盘的数据量,单位为 KB/s。avgrq-sz
:平均每个请求的扇区数。avgqu-sz
:平均请求队列长度。await
:平均 I/O 操作等待时间(单位为毫秒)。r_await
:平均读取操作等待时间(单位为毫秒)。w_await
:平均写入操作等待时间(单位为毫秒)。svctm
:平均 I/O 操作服务时间(单位为毫秒)。%util
:设备利用率,即设备在采样周期内的活动时间与周期总时间的比率。
特别注意
awit
的值越小,代表磁盘性能越好。rkB/s
与wkB/s
根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据的读写,肯定不正常,必须需要优化程序。svctm
的值与await
的值很接近,表示几乎没有 I/O 等待,磁盘性能好。如果await
的值远高于svctm
的值,则表示 I/O 队列等待太长,需要优化程序或更换更快的磁盘(如 SSD 硬盘)。
pidstat
使用 pidstat
命令,可以查看进程的磁盘 I/O 等统计信息。
1 | pidstat -d -u 5 // 每隔5秒显示一次所有进程的磁盘I/O情况 |
pidstat
命令的输出结果格式如下:
1 | 16时24分13秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command |
pidstat
命令的输出结果说明如下:
UID
:进程所属用户的用户 ID。PID
:进程 ID。kB_rd/s
:每秒从磁盘读取的数据量(单位为 KB)。kB_wr/s
:每秒写入到磁盘的数据量(单位为 KB)。kB_ccwr/s
:每秒取消预读取的数据量(单位为 KB)。Command
:进程的命令名称。
查看网络信息
netstat
使用 netstat
命令,可以查看网络连接、路由表、接口统计信息等。
1 | netstat -a // 显示所有活动的网络连接 |
netstat
命令的输出结果格式如下:
1 | Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name |
ifstat
使用 ifstat
命令,可以查看每个网络接口的输入和输出流量信息。Linux 系统默认是没有 ifstat
命令的,需要自行安装。
1 | ifstat // 查看所有网络接口的流量信息 |
ifstat
命令的输出结果格式如下:
1 | Interface RX Pkts/Rate TX Pkts/Rate RX Data/Rate TX Data/Rate |
iftop
使用 iftop
命令,可以实时查看系统的网络连接和流量使用情况。Linux 系统默认是没有 iftop
命令的,需要自行安装。
1 | iftop // 查看所有网络接口的实时流量信息 |
iftop
命令的输出结果格式如下:
1 | interface: en0 |
iftop
命令的输出结果说明如下:
iftop
默认每隔 2 秒更新一次数据。iftop
默认输出 3 列数据,分别表示入站流量、出站流量和总流量。