运维基本功:Linux系统监控与服务管理实战手册 从负载监控到服务管理一篇文章搞定系统稳定运行的核心技能前言昨天学习了进程管理,今天更进一步——从监控系统负载到管理系统服务教你如何判断服务器是否健康、如何用sstemd优雅地管理各种服务。今天的内容分两大块监控系统负载用stress模拟压力用sar、iotop定位瓶颈Linux 服务管理systemd 架构、systemctl 实战、手把手写一个自定义服务学完今天的内容你将能独立完成线上服务器的日常监控和服务运维工作。一、系统负载深度解析1.1 负载平均值到底是什么Linux 内核以活动请求数的指数移动平均值来表示系统负载。活动请求数包含运行中进程R状态 等待IO的进程D状态指数移动平均每5秒计算一次得出 1/5/15 分钟三个值每个 CPU 核心有独立的请求队列重要Linux 的负载平均值包含对 IO 的考量。如果负载很高但 CPU 很低先检查磁盘和网络。1.2 负载值怎么解读以4 核心 CPU为例负载值每核负载状态2.920.73✅ 健康低于0.7×核心数4.481.12⚠️ 超载5.201.30 严重超载理想值长期平均负载不超过CPU核心数 × 0.7# 查看CPU核心数lscpu|grep^CPU(s):# 查看当前负载uptime# 13:47:10 up 5:01, 2 users, load average: 0.00, 0.01, 0.05# 1分钟 ↑ 5分钟 ↑ 15分钟 ↑二、压力测试工具 stressstress用于模拟各种资源的高负载是测试系统稳定性的利器。# 安装yuminstall-ystress# 基本用法stress--cpu8--io4--vm2--vm-bytes 128M--timeout10s2.1 压测 CPU# 让2个CPU核心满载stress-c2# top中可以看到2个stress进程各占100% CPUtop# %Cpu(s): 100.0 us, 0.0 sy, 0.0 id# PID USER %CPU COMMAND# 2596 root 100.0 stress# 2597 root 100.0 stress2.2 压测内存# 压测前查看内存free-m# total used free# Mem: 3931 478 1500# 占用1GB内存stress-m1--vm-bytes 1G# 再次查看free-m# Mem: 3931 1403 575 ← used增加了约1G2.3 压测磁盘 IO# 持续写入2GB数据stress-d1--hdd-bytes 2G# 用 iotop 查看实时磁盘读写yuminstall-yiotop iotop# 用 sar 查看磁盘统计yuminstall-ysysstat sar-dp1# %util 列表示磁盘繁忙程度接近100%说明IO已满2.4 压测网络# 下载大文件产生网络流量wgethttp://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso# 监控网络带宽sar-nDEV1# rxkB/s 接收速率KB/s# txkB/s 发送速率KB/s三、监控工具总结3.1 命令速查表监控维度命令说明CPU/内存/进程top实时动态监控负载平均值uptime快速查看CPU信息lscpu查看核心数内存free -m查看内存使用磁盘IOiotop按进程查看IO磁盘统计sar -dp 1IOPS、吞吐量、利用率网络流量sar -n DEV 1收发速率进程列表ps aux静态快照3.2 监控最佳实践要点核心指标CPU使用率、内存占用、磁盘IOPS、网络带宽专业工具PrometheusGrafana可视化、Zabbix全功能告警阈值CPU持续超80%、磁盘不足10%触发告警日志监控关注/var/log/messages的错误信息磁盘健康用smartctl检测S.M.A.R.T信息建立基线记录正常运行时的指标异常时对比排查四、Linux 服务管理systemd4.1 什么是 systemdCentOS 7 开始使用 Systemd 作为系统和服务管理器PID 为 1是所有进程的“老祖宗”。# 查看 systemd 进程ps-p1# PID TTY STAT TIME COMMAND# 1 ? Ss 0:02 /usr/lib/systemd/systemd关键概念区分概念含义示例服务Service从业务角度的称呼Web服务、数据库服务守护进程Daemon提供服务的后台进程httpd、mysqldUnitsystemd 管理的系统对象sshd.service4.2 Unit 类型一览Unit类型文件后缀用途Service.service系统服务最常用Socket.socket进程间通信套接字Target.target运行级别如 multi-user.targetTimer.timer计划任务替代cronMount.mount文件系统挂载点Path.path路径监控触发服务Slice.slice资源管理4.3 systemctl 命令大全查看类命令# 查看所有已加载的unitsystemctl list-units# 查看所有unit包括未加载的systemctl list-unit-files# 查看指定类型的unitsystemctl list-units-tservice# 查看所有服务含未激活systemctl list-units--typeservice--all# 查看失败的服务systemctl--failed--typeservice# 查看定时器计划任务systemctl list-units-ttimer查看单个服务# 查看服务详细状态systemctl status sshd.service# 只看是否激活systemctl is-active sshd# 只看是否开机自启systemctl is-enabled sshdstatus 输出解读字段含义Loaded配置文件是否加载成功Active运行状态running/exited/waiting/inactiveEnabled是否开机自启enabled/disabled/staticMain PID主进程IDCGroup进程组信息控制类命令命令作用systemctl start UNIT启动服务systemctl stop UNIT停止服务systemctl restart UNIT重启服务stop startsystemctl reload UNIT重载配置不重启进程systemctl enable UNIT设置开机自启systemctl disable UNIT取消开机自启systemctl enable --now UNIT设置开机自启并立即启动systemctl mask UNIT屏蔽服务无法启动systemctl unmask UNIT取消屏蔽⚠️ reload vs restart# reload只重新加载配置文件主进程不重启无中断systemctl reload sshd# restart完全重启服务有短暂中断systemctl restart sshd五、实战开发一个自定义 systemd 服务5.1 第一步编写服务程序创建一个每5秒写日志的脚本[rootcentos7 ~]# vim /usr/local/bin/study#!/bin/bashwhiletruedoDATE$(date)echo$DATE: IM studying [ Linux ]/var/log/study.logsleep5done[rootcentos7 ~]# chmod x /usr/local/bin/study5.2 第二步创建 Unit 配置文件[rootcentos7 ~]# vim /etc/systemd/system/studyd.service[Unit] Descriptionstudy server daemon [Service] ExecStart/usr/local/bin/study [Install] WantedBymulti-user.target配置文件结构段说明[Unit]服务描述和依赖关系[Service]启动命令、重启策略等[Install]开机启动配置WantedBy5.3 第三步加载并启动服务# 1. 通知 systemd 配置文件有变化systemctl daemon-reload# 2. 设置开机自启并立即启动systemctlenablestudyd--now# 3. 查看状态systemctl status studyd# ● studyd.service - study server daemon# Loaded: loaded (/etc/systemd/system/studyd.service; enabled)# Active: active (running) since ...# Main PID: 2786 (study)# CGroup: /system.slice/studyd.service# ├─2786 /bin/bash /usr/local/bin/study# └─2788 sleep 5# 4. 验证日志tail-f/var/log/study.log# 2025年 10月 31日 星期五 16:28:29 CST: IM studying [ Linux ]5.4 systemd 服务文件存放位置路径用途优先级/etc/systemd/system/管理员自定义配置 最高/usr/lib/systemd/system/软件包默认配置 其次 修改系统自带服务时建议复制到/etc/systemd/system/再修改避免被软件包更新覆盖。情景模拟回顾上篇内容场景1后台进程管理1-1 关闭SSH终端后程序停止原因前台进程收到 SIGHUP 信号被终止方案nohup python test_stress.py 或使用screen1-2 作业控制python test_stress.py# 后台运行jobs# 查看作业fg%1# 切回前台CtrlZ# 暂停bg%1# 恢复后台运行1-3 前后台区别前台可读键盘输入终端断开则终止后台不可读键盘输入尝试读取会自动暂停passwd放后台会暂停因为需要交互式密码输入1-4 kill卡死进程kill-15PID# 优雅终止kill-9PID# 强制杀死1-5 批量清理同名进程pkillsleep# 或kill-9$(pgrepsleep)场景2系统监控2-1 ps 命令psaxf# 树形进程psaux--sort-%cpu# 按CPU排序ps-uuser1# 查看user1用户进程2-2 uptime 判断负载 CPU核心数×0.7 表示过载2-3 top 快捷键1展开多核P按CPU排序M按内存排序k杀死进程q退出2-4 用户登录查看whoami# 当前用户who# 当前登录用户w# 更详细信息last# 历史登录记录写在最后到今天为止你已经掌握了 Linux 系统管理的两大核心技能技能核心工具应用场景系统监控top、uptime、sar、iotop排查性能瓶颈、容量规划服务管理systemctl、systemd服务部署、开机自启、故障恢复核心命令速查# 监控uptime# 负载平均值top# 动态监控1/P/M/k/qlscpu# CPU信息free-m# 内存iotop# 磁盘IO按进程sar-dp1# 磁盘统计sar-nDEV1# 网络流量# 服务管理systemctl status UNIT# 查看状态systemctl start/stop/restart/reload UNIT systemctl enable/disable UNIT systemctl mask/unmask UNIT systemctl daemon-reload# 重载配置systemctl list-units-tservicesystemctl--failed点点关注持续更新欢迎技术讨论。