linux 系统状态查看
环境信息
- Centos 7 kernel 5.4.221
启动过程
在 systemd
管理的系统中,提供了工具 systemd-analyze
用于分析具体的启动过程,使用 systemd-analyze --help
查看使用帮助
检查系统启动时间
使用 systemd-analyze
命令会显示系统启动所用的时间,等同于 systemd-analyze time
systemd-analyze |
systemd-analyze blame
列出系统上各个 Unit 启动的时间
systemd-analyze blame |
列出系统各个 Unit 启动消耗的时间
systemd-analyze critical-chain |
查看内存信息
内存相关概念说明:
- VSS ,Virtual Set Size , VIRT - 虚拟耗用内存(包含共享库占用的内存), 通常 VIRT 是系统承诺分配给应用的内存,不是实际使用的内存
- RSS , Resident Set Size , RES - 实际使用物理内存(包含共享库占用的内存)
- PSS , Proportional Set Size - 实际使用的物理内存(比例分配共享库占用的内存)。
top
命令中的SHR
列展示的就是共享库按比例分配给进程的内存 - USS , Unique Set Size - 进程独自占用的物理内存(不包含共享库占用的内存)
系统内存使用量统计
free
free -h |
ps
例如查看使用内存排名前十的进程:
ps aux | sort -k4,4nr | head -n 10 |
sar 命令
查看某个进程使用的内存量
比如检查 docker
使用的内存量,首先通过 ps
命令查询到 docker
的 PID 信息
ps -elf | grep docker |
例如此处的 docker
进程的 PID 为 1243
使用
top
命令动态查看docker
使用的内存信息top -p 1243
top - 11:47:40 up 14 days, 2:09, 3 users, load average: 0.65, 1.42, 1.70
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.0 us, 0.6 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 32068748 total, 2494500 free, 18536188 used, 11038060 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 9586340 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1243 root 20 0 4270108 1.4g 53956 S 1.0 4.6 914:55.80 dockerd使用
ps aux
命令查看内存使用量ps aux | grep 1243
root 1243 4.5 4.6 4270108 1486460 ? Ssl Jan03 914:57 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock输出结果中
- 第 3、4 列 (
4.5 4.6
) 分别表示cpu 使用率
、内存使用率
。 - 第 5、6 列 (
4270108 1486460
) 分别表示虚拟内存使用量
、物理内存使用量
,单位为k
。
- 第 3、4 列 (
通过进程的
status
文件查看内存使用cat /proc/1243/status
Name: dockerd
Umask: 0022
State: S (sleeping)
Pid: 1243
PPid: 1
VmPeak: 4270364 kB
VmSize: 4270108 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 1562204 kB
VmRSS: 1492340 kB
...其中,
VmRSS
为进程使用的物理内存使用
pmap
命令查看进程使用的内存信息pmap -x 1243
pmap -p 1243使用
pidstat
命令查看进程使用的内存信息pidstat -r -t -p 1424681 1 1
Linux 6.8.0-1017-aws (U-3TSDMAL9IVFAQ) 11/26/2024 _x86_64_ (4 CPU)
04:15:40 PM UID TGID TID minflt/s majflt/s VSZ RSS %MEM Command
04:15:41 PM 408001114 1424681 - 0.00 0.00 34656400 256620 1.59 chrome
04:15:41 PM 408001114 - 1424681 0.00 0.00 34656400 256620 1.59 |__chrome
04:15:41 PM 408001114 - 1424696 0.00 0.00 34656400 256620 1.59 |__sandbox_ipc_thr
04:15:41 PM 408001114 - 1424702 0.00 0.00 34656400 256620 1.59 |__chrome
04:15:41 PM 408001114 - 1424703 0.00 0.00 34656400 256620 1.59 |__HangWatcher
04:15:41 PM 408001114 - 1424704 0.00 0.00 34656400 256620 1.59 |__ThreadPoolServi
04:15:41 PM 408001114 - 1424705 0.00 0.00 34656400 256620 1.59 |__ThreadPoolForeg
04:15:41 PM 408001114 - 1424706 0.00 0.00 34656400 256620 1.59 |__ThreadPoolForeg
sar 命令用法参考
sar
(System Activity Reporter)是查看系统上各项活动统计数据的经典工具。他是系统包 sysstat
的一部分,并且依赖于 sysstat.service
。
systemclt enable sysstat |
要查看 sar
命令用法,请参考 sar --help
或者 man sar
下图列出了 sar
可以观测的各个部分及其命令行选项
sar
采集系统统计数据依赖于 crond
服务,具体配置可以查看 /etc/cron.d/sysstat
,默认每 10 分钟归档一次
The first element of the path is a directory where the debian-sa1 |
sar
采集的统计数据默认归档于 /var/log/sysstat/
下。
ls /var/log/sysstat/ |
sar
用法提示:
sar -A
可以导出所有的统计数据sar
的统计数据支持多种格式。可以使用sysstat
安装包中的sadf
命令(用于查看sar
命令的统计数据)查看,如JSON(-j)
、SVG(-g)
、CSV(-d)
sar 检查系统内存统计数据
假如要查看系统上的整体的内存使用情况,可以参考命令
sar -r ALL 1 |
以下命令展示系统上的 Swap 使用情况统计
sar -S 1 |
sar 检查系统 CPU 统计数据
CPU 整体使用率情况统计
假如要查看系统上的整体的 CPU 使用情况,可以参考命令
sar -u ALL 1 |
其中每列数据说明如下:
%usr
: User CPU Time, 在用户态执行进程所占的 CPU 时间百分比。%nice
: Nice CPU Time, 在用户态下以改变了优先级(nice
值)的进程所占的 CPU 时间百分比。%sys
: System CPU Time, 在内核态执行进程(系统调用)所占的 CPU 时间百分比。%iowait
: I/O Wait, CPU 等待 I/O 完成的时间百分比。%steal
: Steal Time, 虚拟化环境中,CPU 等待物理 CPU 被其他虚拟机使用的时间百分比。这个值相对较高是虚拟化环境中的常见现象。%irq
: Interrupt Requests, 硬件中断处理所占的 CPU 时间百分比。%soft
: Soft IRQ, 软中断处理所占的 CPU 时间百分比。%guest
: Guest Time, 虚拟机内部运行进程所占的 CPU 时间百分比。系统上安装了其他虚拟机时会占用此指标。%gnice
: Guest Nice Time, 在虚拟机中以改变了优先级运行的进程所占的 CPU 时间百分比。为 0 表示没有 CPU 时间被分配给虚拟机中带有改变优先级的进程。
系统负载相关统计数据
查看系统 CPU 负载情况,命令帮助参考 sar --help
。-q
选项支持查看:
LOAD
: Queue length and load average statistics [A_QUEUE],默认值CPU
: Pressure-stall CPU statistics [A_PSI_CPU]IO
: Pressure-stall I/O statistics [A_PSI_IO]MEM
: Pressure-stall memory statistics [A_PSI_MEM]
sar -q 1 5 |
其中每列数据说明如下:
runq-sz
: Run Queue Size, 表示运行队列中的进程数,即正在等待 CPU 执行的进程数量。plist-sz
: Process List Size, 表示进程表中的进程总数(无论进程的状态如何)。ldavg-1
: Load Average over 1 Minuteblocked
: 表示当前处于阻塞状态的进程数,通常是等待 I/O(例如等待磁盘操作完成)的进程。
CPU 使用率的统计情况
sar -q CPU 1 3 |
其中每列数据说明如下:
%scpu-10
: 过去 10 秒内的 CPU 使用百分比平均值%scpu
: 当前时间点的 CPU 使用率。
内存使用率的统计情况
sar -q MEM 1 5 |
其中每列数据说明如下:
%smem
: 当前时刻的系统内存使用百分比。%fmem
: 当前时刻的文件内存使用百分比。
IO 使用率情况统计
sar -q IO 1 3 |
sar 检查系统 IO 统计数据
sar -b
检查系统 IO 统计数据
sar -b 1 5 |
其中每列数据说明如下:
tps
: Transfers per second, 每秒钟系统执行的 I/O 请求总数(读和写请求的总和)rtps
: Read transfers per second, 每秒钟发起的读请求数。wtps
: Write transfers per second, 每秒钟发起的写请求数。dtps
: Discard transfers per second, 每秒钟的丢弃操作次数。bread/s
: Blocks read per second, 每秒钟读取的块数(数据块的单位取决于系统的配置,通常为 512 字节)。bwrtn/s
: Blocks written per second, 每秒钟写入的块数bdscd/s
: Blocks discarded per second, 每秒钟被丢弃的块数(例如,通过 trim/discard 操作减少 SSD 的写放大)。
sar 统计磁盘读写情况
sar
命令统计磁盘读写相关数据使用选项 -d
sar -d 1 3 |
其中每列数据说明如下:
DEV
: 表示设备名称tps
: Transactions per Second, 每秒钟执行的 I/O 操作数(包括读写请求)。rd_sec/s
: Read Sectors per Second, 每秒读取的扇区数(扇区的大小通常为 512 字节)。wr_sec/s
: Write Sectors per Second, 每秒写入的扇区数。avgrq-sz
: Average Request Size, I/O 请求的平均大小(以扇区为单位)。例如,avgrq-sz
为29.00
,表示每个 I/O 请求平均涉及 29 个扇区。avgqu-sz
: Average Queue Size, I/O 请求队列的平均长度。await
: Average Wait Time, I/O 请求的平均等待时间(以毫秒为单位),包括排队和服务时间。svctm
: Service Time, I/O 请求的平均服务时间(以毫秒为单位)。%util
: Percentage of CPU Time Used for I/O Operations, 设备的 I/O 操作占用的时间百分比,表示设备忙碌的程度。
sar 统计文件系统分区使用情况
sar -F 1 3 |
其中每列数据说明如下:
MBfsfree
: Megabytes of Free Filesystem Space, 文件系统中剩余的可用空间,以 MB 为单位。MBfsused
: Megabytes of Used Filesystem Space, 文件系统中已使用的空间,以 MB 为单位。%fsused
: Percentage of Filesystem Used, 文件系统已使用空间的百分比。%ufsused
: User Filesystem Usage Percentage, 与 %fsused 相同,表示用户文件系统已使用空间的百分比。Ifree
: Inodes Free, 文件系统中剩余的可用 inode 数量。Inodes 是存储文件元数据的结构,如文件名、文件大小、文件权限等。Iused
: Inodes Used, 文件系统中已使用的 inode 数量。%Iused
: Percentage of Inodes Used, 文件系统已使用 inode 的百分比。FILESYSTEM
: 文件系统的挂载点或设备名。例如,/dev/nvme0n1p1 是一个 NVMe 磁盘分区。
sar 统计网络数据
sar
命令统计网络相关数据使用选项 -n
, 帮助信息如下:
-n { <keyword> [,...] | ALL } |
如下示例统计所有网卡上的网络数据
sar -n DEV 1 2 |
其中每列数据说明如下:
IFACE
: 网络接口名称rxpck/s
: Receive Packets per Second, 每秒接收到的数据包数量。txpck/s
: Transmit Packets per Second, 每秒发送的数据包数量。rxkB/s
: Received Kilobytes per Second, 每秒接收到的数据量(以 KB 为单位)txkB/s
: Transmitted Kilobytes per Second, 每秒发送的数据量(以 KB 为单位)rxcmp/s
: Compressed Packets Received per Second, 每秒接收到的压缩数据包数量。txcmp/s
: Compressed Packets Transmitted per Second, 每秒发送的压缩数据包数量。rxmcst/s
: Multicast Packets Received per Second, 每秒接收到的组播数据包数量。%ifutil
: Interface Utilization Percentage, 网络接口的利用率,表示该接口的总带宽使用情况。
统计 Socket 使用情况
sar -n SOCK 1 2 |
监控 IP 层的网络活动情况
sar -n IP 1 2 |
其中每列数据说明如下:
irec/s
: Incoming Packets Received per Second, 每秒接收到的 IP 数据包数量。fwddgm/s
: Forwarded Datagrams per Second, 每秒被路由转发的 IP 数据包数量(如果系统配置为路由器)。idel/s
: Incoming Datagrams Delivered per Second, 每秒成功交付给上层协议(如 TCP/UDP)的 IP 数据包数量。orq/s
: Outgoing Request Packets per Second, 每秒发出的 IP 数据包请求数。asmrq/s
: Address Mask Requests per Second, 每秒发送的地址掩码请求数据包数。asmok/s
: Address Mask Replies per Second, 每秒发送的地址掩码应答数据包数。fragok/s
: Fragmentation OK per Second, 每秒成功处理的 IP 数据包碎片数。fragcrt/s
: Fragmentation Created per Second, 每秒创建的 IP 数据包碎片数。
监控 TCP 层的网络活动情况
sar -n TCP 1 2 |
其中每列数据说明如下:
active/s
: Active Connections per Second, 每秒发起的主动连接请求数量(客户端发起的 TCP 连接,如 HTTP 请求)。passive/s
: Passive Connections per Second, 每秒接受的被动连接请求数量(服务器接受的 TCP 连接,如服务端的 TCP 监听)。iseg/s
: Incoming Segments per Second, 每秒接收到的 TCP 段数量oseg/s
: Outgoing Segments per Second, 每秒发送的 TCP 段数量。
SysRq
在某些情况,如系统内存耗尽,会导致系统(Shell,GUI)无响应,在这种场景下,可以使用 Alt+SysRq
组合键,它的全称是 System Request
,内核对 Alt+SysRq
组合键有高响应优先级,通过此组合键可以完成以下内容:
Alt + SysRq + S
: 同步所有挂载的文件系统。Alt + SysRq + U
: 卸载所有文件系统(只读模式)。Alt + SysRq + B
: 强制重启系统。Alt + SysRq + K
: 杀死所有用户进程。
要启用 SysRq
功能,系统必须配置了 /proc/sys/kernel/sysrq
的值为 1
,或者配置 kernel.sysrq = 1
到 /etc/sysctl.conf
中,并且只有在系统的终端中才支持这些快捷键组合,远程终端不支持