还不会管控 Linux 后台服务?负载监控、压力测试、自定义服务一次性讲清

📅 2026/7/23 4:47:50
还不会管控 Linux 后台服务?负载监控、压力测试、自定义服务一次性讲清
监控系统负载与 Linux 服务管理一、监控系统负载1. 系统负载概念概念说明Load AverageLinux 内核以活动请求数的指数移动平均值表示系统负载活动请求数包含 R运行中和 D等待 I/O状态的进程计算周期每 5 秒计算一次汇总为 1、5、15 分钟平均值Linux 特点负载包含 CPU I/O负载高但 CPU 低时需检查磁盘/网络CPU 核心计算每个物理核心和超线程均计为独立执行单元# 查看 CPU 信息 [xuhaoyucentos7 ~]$ 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 核心# 查看系统负载 [xuhaoyucentos7 ~]$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.051、5、15 分钟平均负载# 给系统添加负载 [xuhaoyucentos7 ~]$ md5sum /dev/zero[1]4912# md5sum /dev/zero 持续计算哈希消耗 CPU[xuhaoyucentos7 ~]$ md5sum /dev/zero[2]4913# 等待 30 秒后再次查看[xuhaoyucentos7 ~]$uptime13:48:57 up5:03,2users, load average:1.02,0.28,0.13# 负载上升至 1.02# 负载解读 # 示例4 核心 CPU# 负载值2.921分钟4.485分钟5.2015分钟# 每个 CPU 核心负载2.92/40.734.48/41.125.20/41.30# 理想值为每个核心负载不超过 0.7575%2.top命令 – 动态进程监控快捷键功能1显示每个 CPU 核心的使用率P按 CPU 使用率排序大写M按内存使用率排序k终止进程输入 PID 和信号q退出 toph显示帮助# top 动态监控 [xuhaoyucentos7 ~]$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 时间指定运行时长如10s、1m# 安装 stress [rootcentos7 ~]# yum install -y stress# 安装压力测试工具# stress 帮助信息 [rootcentos7 ~]# stress --helpstress 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 压力测试 [rootcentos7 ~]# 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 [xuhaoyucentos7 ]$ 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 # 内存压力测试 # 消耗前查看内存 [rootcentos7 ~]# free -m total used free shared buff/cache available Mem: 3931 478 1500 14 1952 3201 Swap: 3967 0 3967 # 当前空闲内存 1500MB # 消耗 1G 内存 [rootcentos7 ~]# 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 内存 # 消耗后查看内存 [rootcentos7 ~]# 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 压力测试 [rootcentos7 ~]# stress -d 1 --hdd-bytes 2G # 命令解析-d 1 启动 1 个磁盘 I/O 工作进程写入 2GB 数据 # 安装监控工具 [rootcentos7 ~]# yum install -y sysstat iotop # sysstat提供 sar 命令 # iotop实时监控磁盘读写进程 # sar 监控磁盘读写单位512字节/秒 [rootcentos7 ~]# 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 实时监控进程读写 [rootcentos7 ~]# 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 % # 输出解析左右方向键调整排序列 表示当前排序列# 显示每个进程的磁盘读写速度# 网络流量测试 # 下载大文件产生网络流量[rootcentos7 ~]# wget http://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso# 下载 ISO 镜像文件# sar 监控网络带宽[rootcentos7 ~]# 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、mysqldsystemdPID 为 1用户空间第一个进程管理系统和服务的初始化kthreaddPID 为 2内核空间线程管理内核线程的父进程# 服务与守护进程的关系以 httpd 为例 [rootcentos7 ~]# yum install -y httpd# 安装 Apache Web 服务[rootcentos7 ~]# systemctl start httpd# 启动 httpd 服务[rootcentos7 ~]# 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 服务守护进程 httpd2. systemd 架构组件说明systemd守护进程PID1实际执行管理工作systemctl用户交互工具发送命令给 systemdUnit 文件定义服务、socket、timer 等配置的文件3. Unit 类型Unit 类型文件扩展名说明Service.service定义系统服务如 httpd.serviceSocket.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 [rootcentos7 ~]# 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 选项按类型过滤 [xuhaoyucentos7 ~]$ 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 LOADReflects whether the unit definition was properly loaded. ACTIVEThe high-level unit activation state, i.e. generalization of SUB. SUBThe 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 usesystemctl list-unit-files.# 查看所有服务含未激活 [rootcentos7 ~]# systemctl list-units --type service --all# 命令解析--type service 只显示 service 类型--all 显示所有含未加载# 列出所有 unit 文件含未加载 [rootcentos7 ~]# systemctl list-unit-files# 命令解析列出系统中所有已安装的 unit 文件# 输出UNIT FILE | STATEenabled/disabled/static/masked# 查看失败的服务 [rootcentos7 ~]# systemctl --failed --type service# 命令解析--failed 只显示启动失败的服务5. 查看单个 Unit 信息# systemctl status查看服务详细信息 [xuhaoyucentos7 ~]$ 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 startsystemctl reload UNIT重新加载配置文件主进程不重启systemctl enable UNIT设置开机自启--now同时启动systemctl disable UNIT禁止开机自启--now同时停止systemctl is-enabled UNIT查看是否已设置开机自启systemctl mask UNIT屏蔽服务无法启动systemctl unmask UNIT取消屏蔽# 启动与停止服务 [rootcentos7 ~]# systemctl stop sshd.service# 停止 SSH 服务[rootcentos7 ~]# ssh xuhaoyucentos7 hostnamessh: connect tohostcentos7 port22: Connection refused# 连接被拒绝[rootcentos7 ~]# systemctl start sshd.service# 启动 SSH 服务[rootcentos7 ~]# ssh xuhaoyucentos7 hostnamecentos7# 连接成功# 重启与重载服务 [rootcentos7 ~]# systemctl restart sshd.service# restart stop start主进程 PID 会改变[rootcentos7 ~]# systemctl reload sshd.service# 主进程不重启仅重新加载配置文件# 适用于修改端口、超时等无需完全重启的场景# 设置开机自启 [rootcentos7 ~]# 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/ 目录[rootcentos7 ~]# systemctl is-enabled sshdenabled# 查看是否已启用开机自启# 使用 --now 选项同时执行[rootcentos7 ~]# systemctl enable --now sshd.service# enable start立即启动并设置开机自启[rootcentos7 ~]# systemctl disable --now sshd.service# disable stop立即停止并禁止开机自启# 屏蔽与取消屏蔽服务 [rootcentos7 ~]# systemctl mask sshd.serviceCreated symlink from /etc/systemd/system/sshd.service to /dev/null.# 将服务链接到 /dev/null任何启动尝试都会失败[rootcentos7 ~]# systemctl start sshd.serviceFailed to start sshd.service: Unit sshd.service is masked.# 无法启动提示已被屏蔽[rootcentos7 ~]# systemctl unmask sshd.serviceRemoved symlink /etc/systemd/system/sshd.service.# 恢复服务可用性[rootcentos7 ~]# systemctl start sshd.service# 可以正常启动7. Unit 配置文件配置文件位置优先级从高到低路径说明/etc/systemd/system/管理员自定义配置优先生效/usr/lib/systemd/system/软件包默认配置其次生效# sshd.service 配置文件详解 [rootcentos7 ~]cat/usr/lib/systemd/system/sshd.service# 查看 sshd 服务单元文件# [Unit] 部分描述服务基本信息与依赖关系[Unit]DescriptionOpenSSH server daemon# 服务的描述信息Documentationman:sshd(8)man:sshd_config(5)# 指定帮助文档路径Afternetwork.target sshd-keygen.service# 定义启动顺序在网络和密钥生成服务之后启动Wantssshd-keygen.service# 希望 sshd-keygen.service 运行但不是强制依赖# [Service] 部分定义服务的启动方式、执行命令、重启策略[Service]Typenotify# 服务类型notify 表示启动后主动通知 systemd 已就绪EnvironmentFile/etc/sysconfig/sshd# 指定环境变量文件路径ExecStart/usr/sbin/sshd-D$OPTIONS# 启动命令-D 前台运行$OPTIONS 引用环境变量ExecReload/bin/kill-HUP$MAINPID# 重载命令发送 SIGHUP 信号重新加载配置KillModeprocess# 杀死模式只杀主进程保留子进程已有连接Restarton-failure# 重启策略非正常退出时自动重启RestartSec42s# 重启前等待 42 秒# [Install] 部分定义如何被启用开机自启[Install]WantedBymulti-user.target# 系统启动到 multi-user.target 时自动启动该服务8. 开发自定义服务studyd# 步骤 1开发服务主程序 [rootcentos7 ~]# vim /usr/local/bin/study# 创建服务脚本# 脚本内容 #!/bin/bash# 指定解释器whiletrue# 无限循环do# 获取当前时间并记录到日志DATE$(date)echo$DATE: IM studying [ Linux ]/var/log/study.log# 追加写入日志文件sleep5# 每 5 秒执行一次done# 添加执行权限 [rootcentos7 ~]# chmod x /usr/local/bin/study# 添加可执行权限# 步骤 2创建服务单元文件 [rootcentos7 ~]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/studyd.service# 复制 sshd.service 作为模板[rootcentos7 ~]# vim /etc/systemd/system/studyd.service# 编辑服务单元文件# studyd.service 内容 [Unit]Descriptionstudy server daemon# 服务描述[Service]ExecStart/usr/local/bin/study# 启动命令[Install]WantedBymulti-user.target# 开机自启目标# 步骤 3加载并启动服务 [rootcentos7 ~]# systemctl daemon-reload# 通知 systemd 读取 unit 变化[rootcentos7 ~]# systemctl enable studyd --now# 启用并立即启动服务[rootcentos7 ~]# 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验证日志 [rootcentos7 ~]# tail -f /var/log/study.log2025年10月31日 星期五16:28:29 CST: IM studying [ Linux ] 2025年 10月 31日 星期五 16:28:34 CST: IM studying[Linux]2025年10月31日 星期五16:28:39 CST: IM studying[Linux]# 每 5 秒输出一条日志三、速查表监控命令速查功能命令查看系统负载uptime查看 CPU 信息lscpu动态监控进程topCPU 压力测试stress -c 进程名内存压力测试stress -m 进程名 --vm-bytes 大小磁盘 I/O 压力测试stress -d 进程名 --hdd-bytes 大小监控磁盘 I/Osar -dp 1监控磁盘读写进程iotop监控网络流量sar -n DEV 1查看内存使用free -msystemctl 命令速查操作命令查看服务状态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