运维基本功:Linux系统监控与服务管理实战手册
2026/7/23 4:50:48 网站建设 项目流程

从负载监控到服务管理,一篇文章搞定系统稳定运行的核心技能

前言

昨天学习了进程管理,今天更进一步——从监控系统负载管理系统服务,教你如何判断服务器是否健康、如何用sstemd优雅地管理各种服务。

今天的内容分两大块:

  • 监控系统负载:用stress模拟压力,用sariotop定位瓶颈
  • 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分钟 ↑

二、压力测试工具 stress

stress用于模拟各种资源的高负载,是测试系统稳定性的利器。

# 安装yuminstall-ystress# 基本用法stress--cpu8--io4--vm2--vm-bytes 128M--timeout10s

2.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 stress

2.2 压测内存

# 压测前查看内存free-m# total used free# Mem: 3931 478 1500# 占用1GB内存stress-m1--vm-bytes 1G# 再次查看free-m# Mem: 3931 1403 575 ← used增加了约1G

2.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 监控最佳实践(要点)

  1. 核心指标:CPU使用率、内存占用、磁盘IOPS、网络带宽
  2. 专业工具:Prometheus+Grafana(可视化)、Zabbix(全功能)
  3. 告警阈值:CPU持续超80%、磁盘不足10%触发告警
  4. 日志监控:关注/var/log/messages的错误信息
  5. 磁盘健康:用smartctl检测S.M.A.R.T信息
  6. 建立基线:记录正常运行时的指标,异常时对比排查

四、Linux 服务管理(systemd)

4.1 什么是 systemd?

CentOS 7 开始使用 Systemd 作为系统和服务管理器,PID 为 1,是所有进程的“老祖宗”。

# 查看 systemd 进程ps-p1# PID TTY STAT TIME COMMAND# 1 ? Ss 0:02 /usr/lib/systemd/systemd

关键概念区分

概念含义示例
服务(Service)从业务角度的称呼Web服务、数据库服务
守护进程(Daemon)提供服务的后台进程httpd、mysqld
Unitsystemd 管理的系统对象sshd.service

4.2 Unit 类型一览

Unit类型文件后缀用途
Service.service系统服务(最常用)
Socket.socket进程间通信套接字
Target.target运行级别(如 multi-user.target)
Timer.timer计划任务(替代cron)
Mount.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 sshd

status 输出解读

字段含义
Loaded配置文件是否加载成功
Active运行状态(running/exited/waiting/inactive)
Enabled是否开机自启(enabled/disabled/static)
Main PID主进程ID
CGroup进程组信息
控制类命令
命令作用
systemctl start UNIT启动服务
systemctl stop UNIT停止服务
systemctl restart UNIT重启服务(stop + start)
systemctl 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秒写日志的脚本:

[root@centos7 ~]# vim /usr/local/bin/study
#!/bin/bashwhiletruedoDATE=$(date)echo"$DATE: I'M studying [ Linux ]">>/var/log/study.logsleep5done
[root@centos7 ~]# chmod +x /usr/local/bin/study

5.2 第二步:创建 Unit 配置文件

[root@centos7 ~]# vim /etc/systemd/system/studyd.service
[Unit] Description=study server daemon [Service] ExecStart=/usr/local/bin/study [Install] WantedBy=multi-user.target

配置文件结构

说明
[Unit]服务描述和依赖关系
[Service]启动命令、重启策略等
[Install]开机启动配置(WantedBy)

5.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: I'M 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 &或使用screen

1-2 作业控制

python test_stress.py&# 后台运行jobs# 查看作业fg%1# 切回前台Ctrl+Z# 暂停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/q)lscpu# 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

点点关注,持续更新,欢迎技术讨论。

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

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

立即咨询