一 进程基础
1 介绍
进程是操作系统中程序的一次动态执行实例。运行一个程序(如浏览器、文本编辑器)时,操作系统会为其创建一个进程,并分配资源(如内存、CPU时间等)以支持其运行。
每个进程都是独立的,拥有自己的地址空间、数据、代码和系统资源,确保不同进程之间不会直接干扰。
2 ps 命令 – 查看进程
① 语法
# -e 显示所有进程(包括其他用户的进程)。
# -f 以完整格式显示信息(包含UID、PPID等)。
ps -ef # 显示所有进程的完整信息(最常用)
ps aux # 显示更详细的进程信息(BSD风格,兼容性更好)
② 例子
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:10 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 15:10 ? 00:00:00 [kthreadd]
字段 | 说明 |
---|---|
UID | 进程所属用户(如 root)。 |
PID | 进程ID(唯一标识符)。 |
PPID | 父进程ID(启动该进程的进程ID)。 |
C | CPU占用率(百分比,部分系统可能不显示)。 |
STIME | 进程启动时间(格式为 HH:MM 或 月/日/年)。 |
TTY | 启动进程的终端:?:非终端启动(如系统服务)。pts/0:远程终端。tty1:本地虚拟终端。 |
TIME | 进程占用CPU的总时间(格式 HH:MM:SS)。 |
CMD | 进程的完整命令或路径(方括号 [] 表示内核线程)。 |
ps aug
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 632 0.0 0.0 110044 828 tty1 Ss+ 15:10 0:00 /sbin/agetty --noclear tty1 linux
root 921 0.0 0.1 115524 2072 pts/0 Ss 15:10 0:00 -bash
字段 | 说明 |
---|---|
%CPU: | CPU占用率。 |
%MEM: | 内存占用率。 |
VSZ: | 虚拟内存大小(KB)。 |
RSS: | 实际内存占用(KB)。 |
STAT: | 进程状态(如 S=休眠,R=运行,Z=僵尸进程)。 |
# 通过管道符过滤 获取信息
ps -ef | grep nginx
root 945 921 0 15:20 pts/0 00:00:00 grep --color=auto nginx
3 kill 命令 – 关闭进程
① 语法
# -9 强制立即终止进程
kill -9 Pid
② 例子
# 1. 启动tail命令
[root@localhost ~]# tail
# 2. 另一个窗口查询tail命令Pid
[root@localhost ~]# ps aux | grep tail
root 949 0.0 0.0 107940 656 pts/0 S+ 15:27 0:00 tail
root 990 0.0 0.0 112660 968 pts/1 R+ 15:28 0:00 grep --color=auto tail
# 3. 关闭
[root@localhost ~]# kill -9 949
# 4. tail命令窗口
[root@localhost ~]# tail
Killed
# 5. 查询
[root@localhost ~]# ps aux | grep tail
root 993 0.0 0.0 112660 972 pts/1 R+ 15:30 0:00 grep --color=auto tail
二 资源监控
1 top 命令 – 查看系统整体资源占用情况
① 语法
# 设置刷新间隔为5秒 也可以直接top启动
# 退出命令:按 q 或 Ctrl+C。
top -d 5
选项 | 功能说明 | 典型使用场景 | 示例命令 |
---|---|---|---|
-p <PID> | 仅监控指定进程(可多进程,用逗号分隔) | 排查特定进程(如高CPU占用的nginx 或数据库进程) | top -p 1234,5678 |
-d <秒> | 设置刷新间隔(默认5秒,支持小数如0.5 ) | 实时性要求高的场景(如监控突发流量时的CPU峰值) | top -d 1 (每秒刷新) |
-c | 显示完整命令路径(默认仅显示进程名) | 区分同名进程(如多个python 脚本)或查看启动参数 | top -c 或交互模式下按 c 键 |
-n <次数> | 指定刷新次数后退出(常用于脚本自动化) | 定时抓取系统状态快照(如巡检脚本记录3次负载) | top -n 3 (刷新3次后退出) |
-b | 批处理模式(非交互式,可重定向到文件) | 生成日志或与其他工具集成(如crontab 定时任务) | top -b -n 3 > /tmp/top.log |
-u <用户> | 仅显示指定用户的进程 | 审计用户资源使用(如检查mysql 用户是否有异常进程) | top -u mysql |
-i | 忽略闲置(Idle)和僵尸(Zombie)进程 | 聚焦活跃进程(如排查负载高时排除无害僵尸进程) | top -i |
-H | 显示线程而非进程(需交互模式或-p 指定进程) | 分析多线程应用(如Java/Tomcat的线程级CPU占用) | top -H -p 1234 (查看进程1234的线程) |
② 例子
top
top - 15:36:15 up 26 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2031888 total, 1540984 free, 270304 used, 220600 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1585416 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
③ 顶部汇总信息分析
# 第1行:系统运行状态
top - 15:36:15 up 26 min, 1 user, load average: 0.00, 0.00, 0.00
# 程序名称 启动时间 系统运行时间 几个登录用户 负载均衡(1分钟 5分钟 15分钟)若值为1表示有1颗CPU百分百繁忙了
# 第2行:任务(进程)状态
Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie
# 总进程数83个 正在运行进程1个 睡眠进程82个 停止进程0个 僵尸进程0个
# 第3行:CPU占用率
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# cpu用户使用率 系统使用率 高优先级进程使用率 CPU空闲率 IO等待占用率 CPU硬件中断率 CPU软件中断率 强制等待的CPU占用率
# 第4行:物理内存(RAM)
KiB Mem : 2031888 total, 1540984 free, 270304 used, 220600 buff/cache
# 内存总量 空闲内存量 使用内存量 缓存
# 第5行:虚拟内存 交换分区(Swap)
KiB Swap: 2097148 total, 2097148 free, 0 used. 1585416 avail Mem
# 与物理内存相同
# 第6行:表头
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
列名 | 全称/说明 | 示例值 | 作用 |
---|---|---|---|
PID | Process ID(进程ID) | 1234 | 唯一标识进程的数字,用于管理进程(如kill 1234 )。 |
USER | 运行进程的用户 | root | 显示进程所有者,排查权限问题(如非root用户启动了高权限服务)。 |
PR | Priority(优先级) | 20 | 进程的静态优先级(值越小优先级越高,范围通常为0-139)。 |
NI | Nice Value(优先级调整值) | 0 | 用户可调整的优先级(-20到19,值越小优先级越高)。NI 会直接影响PR 值。 |
VIRT | Virtual Memory(虚拟内存) | 500m | 进程占用的全部虚拟地址空间(包括共享库、未使用的内存等),可能远大于实际使用量。 |
RES | Resident Memory(常驻内存) | 120m | 进程实际使用的物理内存(不含交换分区),是衡量内存占用的关键指标。 |
SHR | Shared Memory(共享内存) | 30m | 进程与其他进程共享的内存(如共享库),RES 包含SHR 部分。 |
S | Process State(进程状态) | S | 常见状态: - R :运行中(Running)- S :可中断睡眠(Sleeping)- D :不可中断睡眠(通常与IO相关)- Z :僵尸进程(需清理)- T :暂停(Stopped) |
%CPU | CPU使用率 | 15.3 | 进程在最近采样周期内占用的CPU百分比(多核可能超过100%)。 |
%MEM | 内存使用率 | 6.0 | 进程占用的物理内存(RES )占总内存的百分比。 |
TIME+ | CPU时间 | 0:15.30 | 进程实际使用CPU的总时间(格式:分钟:秒.毫秒 )。 |
COMMAND | 命令名/进程名 | nginx | 启动进程的命令或程序名(可能被截断,按c 键可显示完整路径)。 |
④ 交互模式快捷键:在运行top
后,按下以下键可动态调整显示:
分类 | 按键 | 功能说明 | 适用场景 | 等效命令行参数 |
---|---|---|---|---|
基础操作 | h | 显示帮助画面 | 查阅按键功能或忘记快捷键时 | - |
q | 退出 top | 结束监控返回终端 | - | |
Enter | 立即刷新显示(跳过刷新间隔) | 强制更新数据(如突发性能问题时) | - | |
排序控制 | P | 按 CPU使用率 排序(默认) | 定位高CPU占用进程(如死循环、计算任务) | - |
M | 按 驻留内存(RES) 排序 | 发现内存泄漏或占用过高进程(如Java应用) | - | |
T | 按 累计CPU时间(TIME+) 排序 | 分析长时间运行进程(如卡死服务) | - | |
N | 按 PID号 排序 | 按启动顺序查看进程(新进程PID更大) | - | |
R | 按 优先级(PR/NI) 排序 | 调整进程调度优先级(需配合r 键修改nice值) | - | |
过滤显示 | i | 隐藏闲置/僵尸进程(仅显示活跃进程) | 聚焦关键进程,排除干扰(如系统空闲时大量S 状态进程) | -i |
f | 自定义显示列(字段选择器) | 隐藏无关字段(如PID ),聚焦COMMAND 和%CPU | - | |
u | 仅显示指定用户的进程(输入用户名过滤) | 审计用户资源使用(如检查mysql 用户进程) | -u <用户> | |
k | 终止指定PID的进程(输入PID和信号) | 强制终止失控进程(默认SIGTERM ,强制用SIGKILL ) | - | |
内存显示 | E | 切换顶部内存汇总单位(KiB/MiB/GiB/TiB) | 适应不同规模系统(如从KiB 切换到GiB 避免数值滚动) | - |
e | 切换进程内存列单位(RES/SHR等) | 快速对比进程内存占用(如从1024m 切换为1.0g ) | - | |
CPU信息 | t | 切换CPU状态行显示(用户/系统/空闲等百分比) | 显示/隐藏CPU使用率摘要 | - |
1 | 展开多核CPU详情(显示每个逻辑核心使用率) | 诊断负载不均衡问题(如单核满载) | - | |
H | 显示线程而非进程(需配合-p 或全局) | 分析多线程应用(如Tomcat线程池阻塞) | - | |
高级功能 | W | 保存当前配置到 ~/.toprc | 永久自定义默认显示列和排序规则(下次启动自动加载) | - |
r | 修改进程的nice值(调整优先级) | 优化后台任务资源分配(如降低非关键进程优先级) | - | |
c | 显示进程的完整命令路径(包括参数) | 区分同名进程(如多个python 脚本)或查看启动参数 | -c |
2 df 命令 – 显示文件系统的磁盘空间使用情况
① 语法
# 指定文件/目录时显示其所在分区的信息
df -h [文件或目录]
② 例子
# 文件系统 容量 已用 可用 已用% 挂载点
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 12G 5.4G 69% /
devtmpfs 982M 0 982M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 8.5M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 199M 0 199M 0% /run/user/0
3 iostat 命令 – 监控系统CPU利用率和磁盘I/O统计信息
① 语法
# CentOS/RHEL 安装
yum install sysstat -y
# 启用服务(部分系统需手动启动)
systemctl enable --now sysstat
iostat [选项] [间隔时间] [刷新次数]
② 例子
# 每2秒刷新一次,共刷新5次,显示扩展信息 iostat -x 2 5
iostat
# CPU
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.10 0.01 0.00 99.87
# 当前虚拟机硬盘 每秒传输次数 每秒读取数据量 每秒写入数据量 累计读取数据量 累计写入数据量(自系统启动以来)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.21 31.66 5.93 280176 52499
4 sar 命令 – 查看网络状态
① 语法
# -n DEV:显示网络接口吞吐量(接收/发送速率)每1秒采样1次,共3次,显示网卡流量
sar -n DEV 1 3
② 例子
# 主要关注rxpck/s 每秒接收的数据包数 txpck/s 每秒发送的数据包数
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 07/08/2025 _x86_64_ (1 CPU)
09:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
09:10:01 AM lo 0.10 0.10 0.01 0.01 0.00 0.00 0.00
09:10:01 AM ens33 15.20 8.30 12.50 1.20 0.00 0.00 0.00
09:10:01 AM virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00