【Day 16】Linux-性能查看

目录

一、Stress系统压力测试工具

二、性能查看

(一)查看CPU

[# nproc](# nproc)

[# lscpu](# lscpu)

[# top](# top)

[# uptime](# uptime)

[# mpstat 数字1 数字2](# mpstat 数字1 数字2)

(二)查看内存

[# dmidecode -t memory | less](# dmidecode -t memory | less)

[# free -h](# free -h)

[# vmstat 数字1 数字2](# vmstat 数字1 数字2)

(三)查看进程

[# ps](# ps)

[# top](# top)

(四)查看硬盘

[# df -hT](# df -hT)

[# df -i](# df -i)

[# iostat 数字1 数字2](# iostat 数字1 数字2)

(五)查看网卡

[# ethtool ens33](# ethtool ens33)

[# ifstat](# ifstat)

[# sar -n DEV 数字1 数字2](# sar -n DEV 数字1 数字2)

[# iftop -i 接口](# iftop -i 接口)

三、Linux系统运行模式

[# dmidecode memory | less](# dmidecode memory | less)

​编辑


一、Stress系统压力测试工具

  • # stress -c 数字 //执行sqrt()计算来模拟CPU密集型任务。测试CPU负载能力。
  • # stress -i 数字 //sync()系统调用模拟IO同步操作。测试系统IO调度能力。
  • # stress -m 数字 //频繁的内存分配和释放操作模拟内存压力。测试内存。
  • # stress -d 数字//持续的文件写入和删除操作。测试磁盘IO性能。

二、性能查看

(一)查看CPU

# nproc
  • //查看CPU数量
# lscpu
  • //查看cpu基本架构信息
# top
  • //查看系统整体资源使用情况,负载。

|---------------|--------------------|
| q | 退出top指令 |
| h | 列出可用的快捷键 |
| Shift + M | 按内存使用率排序 |
| Shift + P | 按 CPU 使用率排序(默认) |
| Shift + N | 按 PID 排序 |
| Shift + T | 按运行时间排序 |
| k | 终止指定进程(输入 PID 后确认) |
| z | 切换彩色/黑白显示模式。 |

|---------------------|------------------|---|------------------------------------|-------------------------------------------------------------------------|
| top - 16:08:19 | 当前系统时间 | | load average: 0.01, 0.02, 0.05 | 分别表示过去1分钟、5分钟、15分钟的系统平均负载。数值越高表示系统越繁忙(通常以CPU核心数为参考,如4核CPU的负载超过4可能表示高负载) |
| up 5:58 | 系统已连续运行时间 | | load average: 0.01, 0.02, 0.05 | 分别表示过去1分钟、5分钟、15分钟的系统平均负载。数值越高表示系统越繁忙(通常以CPU核心数为参考,如4核CPU的负载超过4可能表示高负载) |
| 2 users | 当前登录的用户数 | | Tasks: | 任务数量 |
| %Cpu(s): 0.0 us | 用户进程占用CPU百分比 | | KiB Mem : 1863000 total | 物理内存总量(单位KB) |
| 0.2 sy | 系统进程占用CPU百分比 | | 1231848 free | 空闲内存 |
| 0.0 ni | 低优先级进程占用CPU百分比 | | 255592 used | 已使用内存 |
| 99.8 id | CPU空闲百分比 | | 375560 buff/cache | 缓存/缓冲区占用的内存。读:缓存;写:缓冲 |
| 0.0 wa | 等待I/O操作的CPU时间百分比 | | KiB Swap: 1048572 total | 交换分区总量。 |
| 0.0 hi | 硬件中断占用CPU百分比 | | 1048572 free | 空闲交换分区。 |
| 0.0 si | 软件中断占用CPU百分比 | | 0 used | 已使用交换分区 |
| 0.0 st | 被虚拟机偷走的CPU时间百分比 | | 1448536 avail Mem | 可用内存 |

|--------------|----------|--------|----------|-------------|-----------|----------|-------|------------|-------------|--------------|-------------|
| PID | USER | PR | NI | VIRT | RES | SHR | S | %CPU | %MEM | TIME+ | COMMAND |
| 进程的唯一标识符(ID) | 进程所属用户 | 进程优先级 | 进程的Nice值 | 进程占用的虚拟内存总量 | 进程占用的物理内存 | 进程共享内存大小 | 进程状态 | 进程占用CPU百分比 | 进程占用物理内存百分比 | 进程累计使用的CPU时间 | 进程对应的命令或程序名 |

# uptime
  • //查看CPU负载
# mpstat 数字1 数字2
  • //查看CPU使用率。1时间间隔,2次数

(二)查看内存

# dmidecode -t memory | less
  • //查看内存型号、主频
# free -h
  • //查看内存
# vmstat 数字1 数字2
  • //查看内存使用率。1时间间隔,2次数

OOM(物理内存和交换空间均被耗尽)时,OOM Killer 终止进程以释放内存。

(三)查看进程

# ps
  • //简单查看进程
  • # ps aux //查看所有进程的资源占用情况
  • # ps -elf//查看进程间父子关系或优先级
  • # pstree//以树状结构展示进程间的层级关系,直观显示父进程与子进程的派生关系。
  • # pidof 命令//查看命令执行进程的pid
  • PID(进程 ID) // Process ID 的缩写,表示进程的唯一标识符。
  • TTY(终端设备) //Teletype 的缩写,表示进程关联的终端设备。

|------------|-----|---|-----------|------------|---|-------|-------------|
| pts/* | 伪终端 | | tty* | 物理终端或虚拟控制台 | | | 无终端关联,如守护进程 |

  • TIME(CPU 时间) //表示进程占用的 CPU 时间,格式通常为分钟:秒:百分秒
  • CMD(进程名称) // Command 的缩写,显示进程的启动命//令或可执行文件名称
  • USER //进程启动的用户
  • F //进程的状态标志
  • STAT //进程的当前状态。也叫 S 。
  • PPID (Parent Process ID) //父进程的 PID。
  • %CPU、%MEM//进程所消耗的CPU(也叫C)、内存
  • VSZ//虚拟内存集,表示进程占用的虚拟内存总量,包括共享库和未使用的内存页

**物理内存:**物理内存是计算机实际安装的硬件内存,用于存储正在运行的程序和数据。它是虚拟内存系统的基础,所有数据最终需要加载到物理内存中才能被CPU处理。

**共享内存:**共享内存允许多个进程访问同一块内存区域,用于进程间通信。

**交换空间(Swap):**交换空间是硬盘上预留的区域,用于存储暂时不使用的内存页面。当物理内存不足时,系统会将部分不活跃的内存数据临时转移到Swap空间,以释放内存供其他进程使用。

  • RSS//物理内存集,表示进程实际物理内存,不包括未被访问或已换出到交换空间的内存

  • START //进程启动时间

  • COMMAND //进程名称 带[] -->内核进程/系统进程 ; 没带[]-->用户进程

  • PRI //进程优先级(Priority),数值范围通常为0-139(Linux系统),数值越低优先级越高。实时进程优先级范围为0-99,普通进程为100-139。用户可通过nicerenice命令调整普通进程的优先级。

  • NI//Nice值(Nice Value),影响进程的动态优先级调整范围。取值范围为-20到19,默认值为0。负值提高优先级,正值降低优先级。普通用户只能调高Nice值(降低优先级),需root权限才能调低Nice值。

  • ADDR //内存地址(Address),在进程状态中通常指进程的代码或数据在内存中的位置。

  • SZ //内存大小(Size),表示进程占用物理内存的页数(Page)

  • WCHAN //等待通道(Wait Channel),显示进程当前阻塞时所调用的内核函数名称。

  • STIME //启动时间(Start Time),格式通常为HH:MM:SS。对于运行超过24小时的进程,可能显示为日期(如Dec01)。

|------------------------------|---------------------------|---|--------|-----------|
| 进程状态 |||||
| R(Running) | 进程正在运行或就绪 | | < | 高优先级进程。 |
| S(Sleeping | 进程处于可中断的睡眠状态 | | N | 低优先级进程 |
| D(Uninterruptible Sleep) | 进程处于不可中断的睡眠状态(通常与硬件I/O相关) | | s | 进程是会话的首进程 |
| Z(Zombie) | 进程已终止,但父进程尚未回收其资源。 | | l | 进程是多线程的 |
| T(Stopped) | 进程被信号(如SIGSTOP)暂停。 | | + | 进程位于前台进程组 |

前台运行是指程序或进程直接在用户可见的终端或界面中执行,占着命令提示符,并实时显示输出信息。

当父进程先于子进程终止时,子进程会变为孤儿进程(Orphan Process)。此时子进程会被系统的systemd 进程(PID=1)接管负责回收其资源,避免僵尸进程的产生。

注意:不同时间查看同一指令的进程,pid也是不同的。

# top
  • **//**实时动态查看进程状态

(四)查看硬盘

# df -hT
  • //查看容量使用情况
# df -i
  • //查看inode
# iostat 数字1 数字2
  • //查看硬盘的IO。1时间间隔,2次数

(五)查看网卡

# ethtool ens33
  • //查看网卡带宽
# ifstat
  • //查看接收/发送数据包。接受/发送的错误/丢弃数据包数量

device通常指物理硬件设备(如网卡),而interface是操作系统对设备的逻辑抽象,用于配置网络参数(如IP地址、子网掩码等)。例如,一块物理网卡(device)可能对应多个逻辑接口(interface)

通常一个interface仅关联一个物理或虚拟device。但通过网卡聚合可以关联多个device。

一个物理device可以关联多个interface。

# sar -n DEV 数字1 数字2
  • //网卡IO
# iftop -i 接口
  • //实时监控网络流量

千兆网卡的理论最大传输速率为 1 Gbps,换算成字节单位约为 125 MB/s(兆字节每秒)

服务器连接硬盘的方法

**直接连接(内置硬盘):**将硬盘通过SATA或SAS接口直接连接到服务器主板。需确保服务器机箱有足够的硬盘托架和电源供应。适用于需要高速本地存储的场景,如数据库或虚拟机。

**通过RAID卡连接:**使用RAID卡将多个硬盘组成RAID阵列,提升性能或冗余。RAID卡通过PCIe插槽与服务器主板连接,硬盘通过SATA/SAS线连接到RAID卡。适用于需要数据冗余或高性能存储的场景。

**外部存储设备连接:**通过USB、eSATA或Thunderbolt接口连接外部硬盘。适用于临时备份或数据传输,但性能和稳定性可能不如内置方案。

**网络存储连接(NAS/SAN):**硬盘安装在NAS或SAN设备中,服务器通过以太网(NAS)或光纤通道(SAN)访问存储。适用于多服务器共享存储或需要高扩展性的场景。需配置网络和存储协议(如NFS、iSCSI)。

三、Linux系统运行模式

Linux系统的运行模式主要分为以下几种,每种模式对应不同的系统状态和功能:

1、传统SysVinit系统使用运行级别来定义系统状态:

  • 0:关机模式(halt)
  • 1:单用户模式(救援模式,仅root权限)
  • 2:多用户模式(无网络服务)
  • 3:完整多用户模式(命令行界面)
  • 4:保留未使用(用户可自定义)
  • 5:图形界面模式(X11)
  • 6:重启模式

2、现代Linux系统(使用systemd)通过"目标"替代传统运行级别:

  • poweroff.target:关机(对应运行级别0)
  • rescue.target:单用户救援模式(对应运行级别1)
  • multi-user.target:多用户命令行模式(对应运行级别3)
  • graphical.target:图形界面模式(对应运行级别5)
  • reboot.target:重启(对应运行级别6)
  • # who -r //查看当前运行模式
  • # init 数字 //切换运行模式命令(需root权限)
  • # runlevel//显示系统之前和当前所处的运行模式
  • # systemctl isolate graphical.target //临时切换运行模式
  • ls -l /etc/systemd/system/default.target //查看当前系统的默认允许模式

systemctl isolate multi-user.target //字符模式

systemctl isolate graphical.target //图形模式

  • # systemctl set-deafault****graphical.target //修改默认运行级别


# dmidecode memory | less
  • //查看系统配置