还不会管控 Linux 后台服务?负载监控、压力测试、自定义服务一次性讲清
2026/7/23 4:47:45 网站建设 项目流程

监控系统负载与 Linux 服务管理

一、监控系统负载

1. 系统负载概念

概念说明
Load AverageLinux 内核以活动请求数指数移动平均值表示系统负载
活动请求数包含 R(运行中)和 D(等待 I/O)状态的进程
计算周期每 5 秒计算一次,汇总为 1、5、15 分钟平均值
Linux 特点负载包含 CPU + I/O,负载高但 CPU 低时需检查磁盘/网络
CPU 核心计算每个物理核心和超线程均计为独立执行单元
# ============== 查看 CPU 信息 ==============[xuhaoyu@centos7 ~]$ lscpu Architecture: x86_64 CPU op-mode(s):32-bit,64-bit Byte Order: Little Endian CPU(s):2# CPU 数量为 2On-line CPU(s)list:0,1Thread(s)per core:1Core(s)per socket:1Socket(s):2# 输出解析:系统有 2 个 CPU 核心# ============== 查看系统负载 ==============[xuhaoyu@centos7 ~]$uptime13:47:10 up5:01,2users, load average:0.00,0.01,0.05# 输出解析:# 13:47:10:当前时间# up 5:01:系统已运行 5 小时 1 分钟# 2 users:当前登录用户数# load average: 0.00, 0.01, 0.05:1、5、15 分钟平均负载# ============== 给系统添加负载 ==============[xuhaoyu@centos7 ~]$ md5sum /dev/zero&[1]4912# md5sum /dev/zero 持续计算哈希,消耗 CPU[xuhaoyu@centos7 ~]$ md5sum /dev/zero&[2]4913# 等待 30 秒后再次查看[xuhaoyu@centos7 ~]$uptime13:48:57 up5:03,2users, load average:1.02,0.28,0.13# 负载上升至 1.02# ============== 负载解读 ==============# 示例:4 核心 CPU# 负载值:2.92(1分钟),4.48(5分钟),5.20(15分钟)# 每个 CPU 核心负载:2.92/4=0.73,4.48/4=1.12,5.20/4=1.30# 理想值为每个核心负载不超过 0.75(75%)

2.top命令 – 动态进程监控

快捷键功能
1显示每个 CPU 核心的使用率
P按 CPU 使用率排序(大写)
M按内存使用率排序
k终止进程(输入 PID 和信号)
q退出 top
h显示帮助
# ============== top 动态监控 ==============[xuhaoyu@centos7 ~]$top# 输出动态刷新界面top-14:18:22 up47min,2users, load average:1.37,0.50,0.47# 第一行:当前时间、运行时间、用户数、1/5/15分钟负载Tasks:187total,4running,183sleeping,0stopped,0zombie# 第二行:总进程数、运行中、睡眠中、停止、僵尸%Cpu(s):100.0 us,0.0sy,0.0ni,0.0id,0.0wa,0.0hi,0.0si,0.0st# 第三行:us=用户空间,sy=内核空间,id=空闲,wa=等待I/OKiB Mem:4026124total,1535676free,490668used,1999780buff/cache KiB Swap:4063228total,4063228free,0used.3277584avail Mem# 第四、五行:内存和 Swap 使用PIDUSERPR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND2596root20073121000R100.00.01:01.42 stress2597root20073121000R100.00.01:01.25 stress# 进程列表:PID、用户、优先级、虚拟/物理内存、状态、CPU%、MEM%、时间、命令

3.stress工具 – 压力测试

常用选项
选项说明
-c N产生 N 个 CPU 压力进程(sqrt() 计算)
-i N产生 N 个 I/O 压力进程(sync() 调用)
-m N产生 N 个内存压力进程(malloc()/free())
--vm-bytes B每个内存进程分配 B 字节(默认 256MB)
-d N产生 N 个磁盘 I/O 压力进程(write()/unlink())
--hdd-bytes B每个磁盘进程写入 B 字节
-t 时间指定运行时长(如10s1m
# ============== 安装 stress ==============[root@centos7 ~]# yum install -y stress# 安装压力测试工具# ============== stress 帮助信息 ==============[root@centos7 ~]# stress --help`stress' imposes certain types of compute stress on your system Usage: stress [OPTION [ARG]] ... -?, --help show this help statement -v, --verbose be verbose -q, --quiet be quiet -t, --timeout N timeout after N seconds -c, --cpu N spawn N workers spinning on sqrt() -i, --io N spawn N workers spinning on sync() -m, --vm N spawn N workers spinning on malloc()/free() --vm-bytes B malloc B bytes per vm worker (default is 256MB) -d, --hdd N spawn N workers spinning on write()/unlink() --hdd-bytes B write B bytes per hdd worker (default is 1GB) Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s # 示例:8个CPU压力、4个I/O压力、2个内存压力各分配128MB,运行10秒 # ============== CPU 压力测试 ============== [root@centos7 ~]# stress -c 2 stress: info: [2595] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd # 命令解析:-c 2 消耗 2 个 CPU 核心 # 输出:启动 2 个 CPU 工作进程 # top 监控显示两个 stress 进程各占 100% CPU [xuhaoyu@centos7 ]$ top top - 14:18:22 up 47 min, 2 users, load average: 1.37, 0.50, 0.47 Tasks: 187 total, 4 running, 183 sleeping, 0 stopped, 0 zombie %Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2596 root 20 0 7312 100 0 R 100.0 0.0 1:01.42 stress 2597 root 20 0 7312 100 0 R 100.0 0.0 1:01.25 stress # 两个 stress 进程各占 100% CPU # ============== 内存压力测试 ============== # 消耗前查看内存 [root@centos7 ~]# free -m total used free shared buff/cache available Mem: 3931 478 1500 14 1952 3201 Swap: 3967 0 3967 # 当前空闲内存 1500MB # 消耗 1G 内存 [root@centos7 ~]# stress -m 1 --vm-bytes 1G stress: info: [2623] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd # 命令解析:-m 1 启动 1 个内存工作进程,--vm-bytes 1G 分配 1GB 内存 # 消耗后查看内存 [root@centos7 ~]# free -m total used free shared buff/cache available Mem: 3931 1403 575 14 1952 2274 Swap: 3967 0 3967 # 内存使用从 478MB 增至 1403MB,空闲从 1500MB 降至 575MB # ============== 磁盘 I/O 压力测试 ============== [root@centos7 ~]# stress -d 1 --hdd-bytes 2G # 命令解析:-d 1 启动 1 个磁盘 I/O 工作进程,写入 2GB 数据 # 安装监控工具 [root@centos7 ~]# yum install -y sysstat iotop # sysstat:提供 sar 命令 # iotop:实时监控磁盘读写进程 # sar 监控磁盘读写(单位:512字节/秒) [root@centos7 ~]# sar -dp 1 14时23分29秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 14时23分30秒 sda 2699.00 0.00 2762752.00 1023.62 6.11 2.26 0.29 79.50 14时23分30秒 centos-root 2698.00 0.00 2761728.00 1023.62 6.11 2.26 0.29 79.50 # 输出解析: # tps:每秒传输次数 # rd_sec/s:每秒读取扇区数(每个扇区 512 字节) # wr_sec/s:每秒写入扇区数 # %util:磁盘利用率(79.50%) # iotop 实时监控进程读写 [root@centos7 ~]# iotop Total DISK READ : 0.00 B/s | Total DISK WRITE : 51.90 M/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 62.16 M/s TID PRIO USER DISK READ DISK WRITE> SWAPIN IO COMMAND 4573 be/4 xuhaoyu 0.00 B/s 51.90 M/s 0.00 % 96.45 % # 输出解析:左右方向键调整排序列,'>' 表示当前排序列# 显示每个进程的磁盘读写速度# ============== 网络流量测试 ==============# 下载大文件产生网络流量[root@centos7 ~]# wget http://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso# 下载 ISO 镜像文件# sar 监控网络带宽[root@centos7 ~]# sar -n DEV 1# 命令解析:-n DEV 监控网络设备,1 每秒刷新一次14时29分07秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s14时29分08秒 ens3269961.005404.0096338.71513.950.000.000.0014时29分08秒 lo0.000.000.000.000.000.000.00# 输出解析:# IFACE:网络接口名# rxpck/s:每秒接收包数# txpck/s:每秒发送包数# rxkB/s:每秒接收数据量(KB)# txkB/s:每秒发送数据量(KB)

二、Linux 服务管理

1. systemd 基本概念

CentOS 7使用 Systemd 引导系统启动,所有进程并行启动,启动速度最快。

概念说明示例
服务(Service)从业务角度称呼Web 服务、数据库服务
守护进程(Daemon)提供服务支持的后台进程httpd、sshd、mysqld
systemdPID 为 1,用户空间第一个进程管理系统和服务的初始化
kthreaddPID 为 2,内核空间线程管理内核线程的父进程
# ============== 服务与守护进程的关系(以 httpd 为例) ==============[root@centos7 ~]# yum install -y httpd# 安装 Apache Web 服务[root@centos7 ~]# systemctl start httpd# 启动 httpd 服务[root@centos7 ~]# ps -C httpd fPID TTY STAT TIME COMMAND5271? Ss0:00 /usr/sbin/httpd-DFOREGROUND5288? S0:00\_ /usr/sbin/httpd-DFOREGROUND5289? S0:00\_ /usr/sbin/httpd-DFOREGROUND5290? S0:00\_ /usr/sbin/httpd-DFOREGROUND5291? S0:00\_ /usr/sbin/httpd-DFOREGROUND5292? S0:00\_ /usr/sbin/httpd-DFOREGROUND# 命令解析:ps -C httpd f 查看 httpd 进程树# 输出解析:5271 是主进程(守护进程),5288-5292 是子进程# 服务 = web 服务,守护进程 = httpd

2. systemd 架构

组件说明
systemd守护进程(PID=1),实际执行管理工作
systemctl用户交互工具,发送命令给 systemd
Unit 文件定义服务、socket、timer 等配置的文件

3. Unit 类型

Unit 类型文件扩展名说明
Service.service定义系统服务(如 httpd.service)
Socket.socket标识进程间通信的 socket 文件
Target.target模拟实现"运行级别"
Timer.timer管理计划任务
Device.device定义内核识别的设备
Mount.mount定义文件系统挂载点
Snapshot.snapshot管理系统快照
Swap.swap标识 swap 设备
Automount.automount文件系统的自动挂载点
Path.path根据文件系统变化触发其他服务
Slice.slice用于资源管理

4. 查看 Unit 列表

# ============== systemctl list-units:列出已加载的 units ==============[root@centos7 ~]# systemctl list-units# 命令解析:列出当前已加载到内存中的 units# 输出格式:UNIT | LOAD | ACTIVE | SUB | DESCRIPTIONUNIT LOAD ACTIVE SUB DESCRIPTION sshd.service loaded active running OpenSSH server daemon httpd.service loaded active running The Apache HTTP Server# 输出解析:# UNIT:服务单元名称# LOAD:是否正确解析并加载到内存# ACTIVE:高级别激活状态(是否成功启动)# SUB:低级别激活状态(详细信息)# DESCRIPTION:简短描述# ============== -t 选项:按类型过滤 ==============[xuhaoyu@centos7 ~]$ systemctl list-units-ttimer# 命令解析:-t timer 只显示 timer 类型的 unitsUNIT LOAD ACTIVE SUB DESCRIPTION systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories unbound-anchor.timer loaded active waiting daily update of the root trust anchorforDNSSEC LOAD=Reflects whether the unit definition was properly loaded. ACTIVE=The high-level unit activation state, i.e. generalization of SUB. SUB=The low-level unit activation state, values depend on unit type.2loadedunitslisted. Pass--allto see loaded but inactive units, too. To show all installed unit files use'systemctl list-unit-files'.# ============== 查看所有服务(含未激活) ==============[root@centos7 ~]# systemctl list-units --type service --all# 命令解析:--type service 只显示 service 类型,--all 显示所有(含未加载)# ============== 列出所有 unit 文件(含未加载) ==============[root@centos7 ~]# systemctl list-unit-files# 命令解析:列出系统中所有已安装的 unit 文件# 输出:UNIT FILE | STATE(enabled/disabled/static/masked)# ============== 查看失败的服务 ==============[root@centos7 ~]# systemctl --failed --type service# 命令解析:--failed 只显示启动失败的服务

5. 查看单个 Unit 信息

# ============== systemctl status:查看服务详细信息 ==============[xuhaoyu@centos7 ~]$ systemctl status sshd.service ● sshd.service - OpenSSH server daemon Loaded: loaded(/usr/lib/systemd/system/sshd.service;enabled;vendor preset: enabled)Active: active(running)since 三2022-11-09 08:45:45 CST;5h 50min ago Docs: man:sshd(8)man:sshd_config(5)Main PID:1167(sshd)Tasks:1CGroup: /system.slice/sshd.service └─1167 /usr/sbin/sshd-D# 输出解析:# Loaded:单元配置文件已处理,路径、是否开机自启# Active:当前状态(active=运行中,inactive=已停止,failed=失败)# Main PID:主进程 ID# Tasks:任务数# CGroup:控制组路径

状态说明

关键字概述
loaded单元配置文件已处理
active(running)正在运行
active(exited)已成功完成一次性配置
active(waiting)运行中,正在等待事件
inactive不再运行
enabled系统引导时启动
disabled系统引导时不启动
static无法启动,依赖其他单元启动

6. 控制系统服务

命令任务
systemctl status UNIT查看单元状态的详细信息
systemctl stop UNIT停止一项服务
systemctl start UNIT启动一项服务
systemctl restart UNIT重启一项服务(stop + start)
systemctl reload UNIT重新加载配置文件(主进程不重启)
systemctl enable UNIT设置开机自启(--now同时启动)
systemctl disable UNIT禁止开机自启(--now同时停止)
systemctl is-enabled UNIT查看是否已设置开机自启
systemctl mask UNIT屏蔽服务(无法启动)
systemctl unmask UNIT取消屏蔽
# ============== 启动与停止服务 ==============[root@centos7 ~]# systemctl stop sshd.service# 停止 SSH 服务[root@centos7 ~]# ssh xuhaoyu@centos7 hostnamessh: connect tohostcentos7 port22: Connection refused# 连接被拒绝[root@centos7 ~]# systemctl start sshd.service# 启动 SSH 服务[root@centos7 ~]# ssh xuhaoyu@centos7 hostnamecentos7# 连接成功# ============== 重启与重载服务 ==============[root@centos7 ~]# systemctl restart sshd.service# restart = stop + start,主进程 PID 会改变[root@centos7 ~]# systemctl reload sshd.service# 主进程不重启,仅重新加载配置文件# 适用于修改端口、超时等无需完全重启的场景# ============== 设置开机自启 ==============[root@centos7 ~]# systemctl enable sshd.serviceCreated symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.# 创建符号链接到 multi-user.target.wants/ 目录[root@centos7 ~]# systemctl is-enabled sshdenabled# 查看是否已启用开机自启# 使用 --now 选项同时执行[root@centos7 ~]# systemctl enable --now sshd.service# enable + start,立即启动并设置开机自启[root@centos7 ~]# systemctl disable --now sshd.service# disable + stop,立即停止并禁止开机自启# ============== 屏蔽与取消屏蔽服务 ==============[root@centos7 ~]# systemctl mask sshd.serviceCreated symlink from /etc/systemd/system/sshd.service to /dev/null.# 将服务链接到 /dev/null,任何启动尝试都会失败[root@centos7 ~]# systemctl start sshd.serviceFailed to start sshd.service: Unit sshd.service is masked.# 无法启动,提示已被屏蔽[root@centos7 ~]# systemctl unmask sshd.serviceRemoved symlink /etc/systemd/system/sshd.service.# 恢复服务可用性[root@centos7 ~]# systemctl start sshd.service# 可以正常启动

7. Unit 配置文件

配置文件位置(优先级从高到低)

路径说明
/etc/systemd/system/管理员自定义配置,优先生效
/usr/lib/systemd/system/软件包默认配置,其次生效
# ============== sshd.service 配置文件详解 ==============[root@centos7 ~]cat/usr/lib/systemd/system/sshd.service# 查看 sshd 服务单元文件# [Unit] 部分:描述服务基本信息与依赖关系[Unit]Description=OpenSSH server daemon# 服务的描述信息Documentation=man:sshd(8)man:sshd_config(5)# 指定帮助文档路径After=network.target sshd-keygen.service# 定义启动顺序:在网络和密钥生成服务之后启动Wants=sshd-keygen.service# "希望" sshd-keygen.service 运行,但不是强制依赖# [Service] 部分:定义服务的启动方式、执行命令、重启策略[Service]Type=notify# 服务类型:notify 表示启动后主动通知 systemd 已就绪EnvironmentFile=/etc/sysconfig/sshd# 指定环境变量文件路径ExecStart=/usr/sbin/sshd-D$OPTIONS# 启动命令:-D 前台运行,$OPTIONS 引用环境变量ExecReload=/bin/kill-HUP$MAINPID# 重载命令:发送 SIGHUP 信号重新加载配置KillMode=process# 杀死模式:只杀主进程,保留子进程(已有连接)Restart=on-failure# 重启策略:非正常退出时自动重启RestartSec=42s# 重启前等待 42 秒# [Install] 部分:定义如何被启用(开机自启)[Install]WantedBy=multi-user.target# 系统启动到 multi-user.target 时自动启动该服务

8. 开发自定义服务(studyd)

# ============== 步骤 1:开发服务主程序 ==============[root@centos7 ~]# vim /usr/local/bin/study# 创建服务脚本# ============== 脚本内容 ==============#!/bin/bash# 指定解释器whiletrue# 无限循环do# 获取当前时间并记录到日志DATE=$(date)echo"$DATE: I'M studying [ Linux ]">>/var/log/study.log# 追加写入日志文件sleep5# 每 5 秒执行一次done# ============== 添加执行权限 ==============[root@centos7 ~]# chmod +x /usr/local/bin/study# 添加可执行权限# ============== 步骤 2:创建服务单元文件 ==============[root@centos7 ~]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/studyd.service# 复制 sshd.service 作为模板[root@centos7 ~]# vim /etc/systemd/system/studyd.service# 编辑服务单元文件# ============== studyd.service 内容 ==============[Unit]Description=study server daemon# 服务描述[Service]ExecStart=/usr/local/bin/study# 启动命令[Install]WantedBy=multi-user.target# 开机自启目标# ============== 步骤 3:加载并启动服务 ==============[root@centos7 ~]# systemctl daemon-reload# 通知 systemd 读取 unit 变化[root@centos7 ~]# systemctl enable studyd --now# 启用并立即启动服务[root@centos7 ~]# systemctl status studyd● studyd.service - study server daemon Loaded: loaded(/etc/systemd/system/studyd.service;enabled;vendor preset: disabled)Active: active(running)since 五2025-10-3116:28:34 CST;1s ago Main PID:2786(study)Tasks:2CGroup: /system.slice/studyd.service ├─2786 /bin/bash /usr/local/bin/study └─2788sleep5# 服务正常运行# ============== 步骤 4:验证日志 ==============[root@centos7 ~]# tail -f /var/log/study.log20251031日 星期五16:28:29 CST: I'M studying [ Linux ] 2025年 10月 31日 星期五 16:28:34 CST: I'M studying[Linux]20251031日 星期五16:28:39 CST: I'M studying[Linux]# 每 5 秒输出一条日志

三、速查表

监控命令速查

功能命令
查看系统负载uptime
查看 CPU 信息lscpu
动态监控进程top
CPU 压力测试stress -c 进程名
内存压力测试stress -m 进程名 --vm-bytes 大小
磁盘 I/O 压力测试stress -d 进程名 --hdd-bytes 大小
监控磁盘 I/Osar -dp 1
监控磁盘读写进程iotop
监控网络流量sar -n DEV 1
查看内存使用free -m

systemctl 命令速查

操作命令
查看服务状态systemctl status UNIT
启动服务systemctl start UNIT
停止服务systemctl stop UNIT
重启服务systemctl restart UNIT
重载配置systemctl reload UNIT
设置开机自启systemctl enable UNIT
禁止开机自启systemctl disable UNIT
设置开机自启并立即启动systemctl enable --now UNIT
禁止开机自启并立即停止systemctl disable --now UNIT
查看是否开机自启systemctl is-enabled UNIT
屏蔽服务systemctl mask UNIT
取消屏蔽systemctl unmask UNIT
查看所有已加载 unitsystemctl list-units
查看所有 unit 文件systemctl list-unit-files
查看指定类型 unitsystemctl list-units -t 类型
查看失败的服务systemctl --failed --type service
重新加载 unit 配置systemctl daemon-reload

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询