Linux系统负载监控与服务管理实战笔记blog_content ‘’# Linux系统负载监控与服务管理实战笔记本文基于CentOS 7系统梳理了系统负载监控、stress压力测试、systemd服务管理以及OpenSSH服务配置的实战知识点适合运维初学者和准备RHCE认证的同学。一、系统负载基础概念1.1 什么是系统负载系统负载平均值Linux内核以活动请求数的指数移动平均值来表示。活动请求数不仅包含运行中进程®还包含等待IO的进程(D)。等待IO包括处于睡眠等待预期磁盘和网络响应的任务。指数移动平均值是一个数学公式可以平滑趋势数据的高值和低值更加准确地表示一段时间内系统负载并确定系统负载是随着时间增加还是减少。计算频率根据所有CPU活动请求数每5秒计算一次Load Average。通过汇总这些值可以得到最近1分钟5分钟和15分钟内的指数移动平均值。1.2 Linux负载的特殊性一些UNIX系统仅考虑CPU使用率或运行队列长度。Linux中负载平均值中还包含了对IO的考量遇到负载平均值很高但CPU活动很低时检查磁盘和网络活动。Linux将各个物理CPU核心和微处理器超线程计为独立执行单元。每个独立的执行单元拥有独立的请求队列。二、查看系统负载2.1 uptime命令[laomacentos7 ~]$uptime13:47:10 up5:01,2users, load average:0.00,0.01,0.05输出解读13:47:10当前系统时间up 5:01系统已运行5小时1分钟2 users当前2个用户登录load average: 0.00, 0.01, 0.051分钟、5分钟、15分钟的平均负载2.2 lscpu查看CPU信息[laomacentos7 ~]$ lscpu Architecture: x86_64 CPU(s):2# cpu数量为2On-line CPU(s)list:0,1Thread(s)per core:1Core(s)per socket:1socket22.3 负载解读实例假设服务器为4核CPU负载为2.92, 4.48, 5.20时间总负载每核负载状态1分钟2.922.92/4 0.73正常5分钟4.484.48/4 1.12轻微过载15分钟5.205.20/4 1.30过载判断标准每核负载理想值为0.75左右超过1.0表示过载。2.4 模拟高负载# 给系统加负载[laomacentos7 ~]$ md5sum /dev/zero[1]4912[laomacentos7 ~]$ md5sum /dev/zero[2]4913# 等30秒左右查看[laomacentos7 ~]$uptime13:48:57 up5:03,2users, load average:1.02,0.28,0.13三、top命令动态监控3.1 启动toptoptop命令可以动态查看进程信息包括不同状态任务数量、CPU消耗和内存消耗。3.2 常用快捷键快捷键功能1展开多核显示查看每个CPU核心的使用率P按CPU使用率排序大写P%CPU从高到低M按内存使用率排序大写M%MEM从高到低k杀死指定进程输入后提示输入PID和信号默认15可输9强制q退出top监控h显示帮助信息—四、stress压力测试工具4.1 安装stress[rootcentos7 ~]# yum install -y stress### 4.2 stress参数说明-c, --cpu N spawn N workers spinning on sqrt() # CPU压力 -i, --io N spawn N workers spinning on sync() # IO压力 -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) -t, --timeout N timeout after N seconds # 超时时间组合测试CPU 内存 磁盘结合top命令查看stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 10s4.3 CPU压力测试# 消耗2个CPU[rootcentos7 ~]# stress -c 2stress: info:[2595]dispatching hogs:2cpu,0io,0vm,0hdd# top监控效果top-14:18:22 up47min,2users, load average:1.37,0.50,0.47Tasks:187total,4running,183sleeping,0stopped,0zombie %Cpu(s):100.0 us,0.0sy,0.0ni,0.0id,0.0wa,0.0hi,0.0si,0.0st PIDUSERPR NI VIRT RES SHR S %CPU %MEM TIME COMMAND2596root20073121000R100.00.01:01.42 stress2597root20073121000R100.00.01:01.25 stress4.4 内存压力测试# 消耗前内存[rootcentos7 ~]# free -mtotal usedfreeshared buff/cache available Mem:393147815001419523201Swap:396703967# 消耗1G内存[rootcentos7 ~]# stress -m 1 --vm-bytes 1Gstress: info:[2623]dispatching hogs:0cpu,0io,1vm,0hdd# 消耗后内存[rootcentos7 ~]# free -mtotal usedfreeshared buff/cache available Mem:393114035751419522274Swap:3967039674.5 磁盘压力测试# 消耗磁盘IO[rootcentos7 ~]# stress -d 1 --hdd-bytes 2G# 安装sysstat和iotop[rootcentos7 ~]# yum install -y sysstat iotop# 监控磁盘读写速度重点关注rd_sec/s和wr_sec/s单位是0.5k/每秒[rootcentos7 ~]# sar -dp 114时23分29秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util14时23分30秒 sda2699.000.002762752.001023.626.112.260.2979.5014时23分30秒 centos-root2698.000.002761728.001023.626.112.260.2979.504.6 iotop进程级磁盘监控[rootcentos7 ~]# iotopTotal DISK READ:0.00B/s|Total DISK WRITE:51.90M/s Actual DISK READ:0.00B/s|Actual DISK WRITE:62.16M/s TID PRIOUSERDISK READ DISK WRITESWAPIN IO COMMAND4573be/4 laoma0.00B/s51.90M/s0.00%96.45% stress-d1--hdd-bytes 2G提示左右方向键调整排序列代表当前排序列4.7 网络测试# 传送一个大size的文件[rootcentos7 ~]# wget http://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso# 监控带宽[rootcentos7 ~]# sar -n DEV 114时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.00五、Linux服务管理systemd5.1 systemd简介CentOS 7使用Systemd引导系统启动速度最快所有进程无论有无依赖关系则都是并行启动。服务从业务角度来称呼例如web服务数据库服务守护进程daemonweb服务器对外提供web服务由web相关的进程提供支持以web服务为例服务web服务守护进程httpd5.2 systemd架构守护进程systemd由守护进程干活工具systemctl提供给用户用来跟机器交互的工具5.3 unit类型systemctl命令用于管理不同类型的系统对象这些对象称之为units类型扩展名用途Service unit.service用于定义系统服务Socket unit.socket用于标识进程间通信用的socket文件Target unit.target用于模拟实现运行级别Timer unit.timer用于管理计划任务Device unit.device用于定义内核识别的设备Mount unit.mount用于定义文件系统挂载点Snapshot unit.snapshot管理系统快照Swap unit.swap用于标识swap设备Automount unit.automount文件系统的自动挂载点Path unit.path用于根据文件系统上特定对象的变化来启动其他服务Slice unit.slice用于资源管理5.4 查看unit列表# 列出状态为loaded的units[rootcentos7 ~]# systemctl list-units# 查看特定类型unit清单[laomacentos7 ~]$ systemctl list-units-ttimer# 列出类型为service状态为active和inactive的unit[rootcentos7 ~]# systemctl list-units --type service --all# 列出系统中所有unit包括未loaded的unit[rootcentos7 ~]# systemctl list-unit-files# 查看失败的服务[rootcentos7 ~]# systemctl --failed --type service5.5 查看单个unit信息[laomacentos7 ~]$ 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(running)正在运行active(exited)已成功完成一次性配置active(waiting)运行中正在等待事件inactive不再运行enabled系统引导时启动disabled系统引导时不启动static无法启动依赖其他单元启动5.6 控制系统服务命令任务systemctl status UNIT查看单元状态的详细信息systemctl stop UNIT在运行中的系统上停止一项服务systemctl start UNIT在运行中的系统上启动一项服务systemctl restart UNIT在运行中的系统上重新启动一项服务systemctl reload UNIT重新加载运行中服务的配置文件systemctl mask UNIT禁用服务使其无法手动启动或在系统引导时启动systemctl unmask UNIT使屏蔽的服务变为可用systemctl enable UNIT将服务配置为在系统引导时启动加–now也会启动该服务systemctl disable UNIT禁止服务在系统引导时启动加–now也会停止该服务# 停止服务[rootcentos7 ~]# systemctl stop sshd.service# 启动服务[rootcentos7 ~]# systemctl start sshd.service# 重启服务相当于stop再start[rootcentos7 ~]# systemctl restart sshd.service# 重新加载服务主进程不会重启只会重新加载配置文件[rootcentos7 ~]# systemctl reload sshd.service# 禁止服务开机自启[rootcentos7 ~]# systemctl disable sshd.service[rootcentos7 ~]# systemctl is-enabled sshddisabled# 设置服务开机自启[rootcentos7 ~]# systemctl enable sshd.service[rootcentos7 ~]# systemctl is-enabled sshdenabled# 禁用服务服务被禁用后将无法start因为服务的配置文件指向/dev/null[rootcentos7 ~]# systemctl mask sshd.service# 取消禁用[rootcentos7 ~]# systemctl unmask sshd.service六、unit配置文件详解6.1 配置文件位置/etc/systemd/system/unit.service优先生效一般是管理员自定义的配置/usr/lib/systemd/system/unit.service其次生效软件包自带的默认配置6.2 sshd.service配置文件解析# 标识该部分为 Unit 配置用于描述服务的基本信息、依赖关系等。 [Unit] # 服务的描述信息 DescriptionOpenSSH server daemon # 指定服务的文档路径 Documentationman:sshd(8) man:sshd_config(5) # 定义服务的启动顺序 Afternetwork.target sshd-keygen.service # 表示sshd服务希望sshd-keygen.service运行但不是强制依赖 Wantssshd-keygen.service # 标识该部分为 Service 配置 [Service] # 定义服务的类型为notify Typenotify # 指定环境变量文件的路径 EnvironmentFile/etc/sysconfig/sshd # 服务启动时执行的命令 ExecStart/usr/sbin/sshd -D $OPTIONS # 服务重载配置时执行的命令 ExecReload/bin/kill -HUP $MAINPID # 定义服务停止时的杀死模式 KillModeprocess # 定义服务的重启策略 Restarton-failure # 服务重启前的等待时间 RestartSec42s # 标识该部分为 Install 配置 [Install] # 表示当系统启动到multi-user.target时该服务会被自动启动 WantedBymulti-user.target6.3 开发自定义服务示例步骤1编写服务主程序[rootcentos7 ~]# vim /usr/local/bin/study#!/bin/bash# 第一行是shebang指定使用/bin/bash作为解释器# 启动一个无限循环whiletruedo# 获取当前系统时间DATE$(date)# 将日志追加到/var/log/study.logecho$DATE: IM studying [ Linux ]/var/log/study.log# 暂停5秒sleep5# 循环结束done[rootcentos7 ~]# chmod x /usr/local/bin/study步骤2创建服务单元文件# 参考sshd.service[rootcentos7 ~]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/studyd.service[rootcentos7 ~]# vim /etc/systemd/system/studyd.service[Unit] Descriptionstudy server daemon [Service] ExecStart/usr/local/bin/study [Install] WantedBymulti-user.target步骤3加载并启动服务# 通知systemd读取unit变化[rootcentos7 ~]# systemctl daemon-reload# 启用并启动服务[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]......七、OpenSSH服务管理7.1 环境准备准备两台虚拟机server虚拟机IP地址为10.1.8.10/24client虚拟机IP地址为10.1.8.11/24设置主机名称和名称解析以client为例# 永久设置主机名[rootlocalhost ~]# hostnamectl set-hostname client.laoma.cloud# 临时设置[rootlocalhost ~]# hostname client.laoma.cloud# 验证[rootclient ~]# bash# 准备名称解析[rootclient ~]# echo 10.1.8.10 server.laoma.cloud server10.1.8.11 client.laoma.cloud client/etc/hosts7.2 SSH介绍SSH全称是Secure ShellSSH协议是基于应用层的协议为远程登录会话和其他网络服务提供安全性的协议。实现此功能的传统方式telnet、rcp、ftp、rlogin、rsh都是极为不安全的会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具用来加密远程控件和文件传输过程中的数据。7.3 SSH建立连接的过程主要分为下面几个阶段SSH协议版本协商阶段SSH目前包括SSH1和SSH2两个大版本密钥和算法协商阶段SSH支持多种加密算法双方根据支持的算法进行协商认证阶段服务器和客户端互相进行身份验证会话请求阶段客户端向服务器端发送会话请求申请伪终端、端口转发等交互会话阶段服务器端和客户端进行信息的交互7.4 加密类型对称加密加密和解密都使用一个钥匙。确保数据的完整性、速度快。非对称加密一对钥匙。公钥用来加密数据私钥用来解密数据。确保数据的安全性。7.5 双向加密过程SSH协议是基于非对称加密方法的服务器和客户端都会生成自己的公钥和私钥服务器创建密钥对远程服务器在/etc/ssh目录下生成密钥对如ssh_host_ecdsa_key.pub公钥和ssh_host_ecdsa_key私钥。每回启动sshd服务时系统会自动在此路径下查找公钥。客户端记录服务器公钥并计算自己的公私钥客户端将服务器传来的公钥记录在~/.ssh/known_hosts中然后计算客户端自己的公私钥。客户端使用服务器的公钥加密自己的公钥并发送给服务器服务器端拥有客户端公钥自己私钥客户端拥有服务器公钥自己私钥组成了非对称加密系统。双向加解密服务器发送数据用客户端公钥加密客户端收到后用自己私钥解密客户端发送数据用服务器公钥加密服务器收到后用自己私钥解密7.6 ssh工具使用方式一只指定IP或主机名# 通过IP地址[laomaclient ~]$ssh10.1.8.10 The authenticity ofhost10.1.8.10 (10.1.8.10)cant be established. ECDSA key fingerprint is SHA256:... Are you sure you want to continue connecting (yes/no/[fingerprint])? yes laoma10.1.8.10s password: redhat# 通过主机名称[laomaclient ~]$sshserver方式二额外指定用户名# 指定root用户登录[laomaclient ~]$sshrootserver# 或者[laomaclient ~]$ssh-lroot server方式三额外指定命令# 同时指定用户和命令[laomaclient ~]$sshlaomaserverhostnamelaomaservers password: redhat server.laoma.cloud [laomaclient ~]$ ssh rootserver hostname;id server.laoma.clouduid0(root)gid0(root)组0(root)7.7 ssh工具配置文件~/.ssh/config用户自己的配置优先级高于全局配置。文件权限不得高于644。/etc/ssh/ssh_config全局配置应用于所有用户。[laomaclient ~]$mkdir.ssh[laomaclient ~]$chmod700.ssh[laomaclient ~]$vim~/.ssh/configHost * StrictHostKeyChecking no User root PreferredAuthentications Pubkey[laomaclient ~]$chmod600.ssh/config参数说明**Host ***匹配所有目标服务器StrictHostKeyChecking no连接目标服务器不校验主机key直接接受User root连接目标服务器默认使用root账户PreferredAuthentications password连接目标服务器使用密码认证IdentityFile指定私钥位置权限要求[laomaclient ~]$sshserver Bad owner or permissions on /home/laoma/.ssh/config[laomaclient ~]$chmod600.ssh/config7.8 配置密钥认证客户端生成密钥对[laomaclient ~]$ ssh-keygen Generating public/private rsa key pair.# 私钥保存位置Enterfileinwhichto save the key(/home/laoma/.ssh/id_rsa): 回车# 私钥加密密码回车表示不加密Enter passphrase(emptyforno passphrase): 回车 Enter same passphrase again: 回车 Your identification has been savedin/home/laoma/.ssh/id_rsa. Your public key has been savedin/home/laoma/.ssh/id_rsa.pub.推送公钥到服务器[laomaclient ~]$ ssh-copy-id laomaserver验证免密登录[laomaclient ~]$sshlaomaserverhostnameserver.laoma.cloud切记记得把公钥推给root用户才可以免密返回推送公钥的本质将公钥内容保存到目标服务器目标用户家目录下.ssh/authorized_keys中。以非交互方式生成密钥对[laomaclient ~]$ ssh-keygen-trsa-N-fid_rsa_new其他选项# -i 指定私钥位置[laomaclient ~]$ssh-i/tmp/id_rsa rootserverhostname# -p 选项指定目标服务器sshd服务端口号默认22[laomaclient ~]$ssh-lroot-p1022serverhostname7.9 密钥认证排故故障现象配置密钥登录后远程登录仍需要输入密码。模拟故障将目标主机上目标用户的家目录权限改为777。[rootserver ~]# chmod 777 /root处理过程查看日志[rootserver ~]# tail -f /var/log/secureJul3116:13:41 server sshd[3693]: Authentication refused: bad ownership or modesfordirectory /root修复权限[rootserver ~]# ls -ld /rootdrwxrwxrwx.3root root4096Jul3116:09 /root# 更改权限[rootserver ~]# chmod 700 /root7.10 加固SSH服务编辑/etc/ssh/sshd_config1. 禁止root密码登录[rootserver ~]# vim /etc/ssh/sshd_config#PermitRootLogin yes# 添加一行PermitRootLogin prohibit-password[rootserver ~]# systemctl reload sshd测试即使使用正确的密码也无法远程登录。如果配置了秘钥登录则需要使用选项强制密码认证[laomaclient ~]$ssh-oPreferredAuthenticationspassword rootserver2. 禁止root登录[rootserver ~]# vim /etc/ssh/sshd_configPermitRootLogin no[rootserver ~]# systemctl reload sshd测试不管是密码还是秘钥都无法登录root。但可以使用普通用户登录然后提权为root[laomaclient ~]$sshlaomaserver[laomaserver ~]$su-[rootserver ~]#3. 禁止密码登录[rootserver ~]# vim /etc/ssh/sshd_config#PasswordAuthentication yesPasswordAuthentication no[rootserver ~]# systemctl reload sshd测试# laoma账户未配置密钥登录直接拒绝[laomaclient ~]$ssh-oPreferredAuthenticationspassword laomaserver Permission denied(publickey,gssapi-keyex,gssapi-with-mic).# 秘钥登录仍然支持[laomaclient ~]$sshlaomaserver4. 只允许特定用户登录# 准备laowang用户[rootserver ~]# useradd laowang[rootserver ~]# echo 123 | passwd --stdin laowang[rootserver ~]# mkdir -m 700 /home/laowang/.ssh/[rootserver ~]# cp .ssh/authorized_keys /home/laowang/.ssh/[rootserver ~]# chown -R laowang:laowang /home/laowang/.ssh/# 配置sshd[rootserver ~]# vim /etc/ssh/sshd_configAllowUsers lhy[rootserver ~]# systemctl reload sshd测试# laowang cannot log in[laomaclient ~]$sshlaowangserverhostnamePermission denied(publickey,gssapi-keyex,gssapi-with-mic).# laoma can log in[laomaclient ~]$sshlaomaserverhostnameserver.laoma.cloud八、监控总结以下是针对Linux系统监控的几条实用建议核心指标实时监控重点跟踪CPU使用率用户态/系统态占比、内存占用含缓存/swap使用率、磁盘I/O读写吞吐量、IOPS和网络流量带宽利用率、连接数。可通过top/htop实时、vmstat/iostat系统级等工具快速查看。部署专业监控工具对于服务器集群或长期监控需求建议使用Prometheus Grafana可视化强、Zabbix全功能监控或Nagios轻量告警等工具。设置关键阈值告警针对核心指标配置告警阈值如CPU持续5分钟超80%、磁盘空间不足10%通过邮件、短信或即时通讯工具推送告警。监控进程与服务状态定期检查关键服务如Nginx、MySQL的运行状态、进程数及资源消耗可通过systemctl status或自定义脚本实现。日志集中管理与分析将系统日志/var/log/messages、应用日志集中存储如使用ELK栈关注错误信息ERROR级别、登录异常/var/log/secure和磁盘错误dmesg | grep error。磁盘健康监控除空间使用率外需关注磁盘坏块smartctl工具检测S.M.A.R.T信息和文件系统完整性定期运行fsck。网络与安全监控监控端口开放状态netstat/ss、异常连接尤其是外部IP的高频访问和防火墙规则生效情况。可结合tcpdump抓包分析可疑流量。定期性能基线分析记录系统正常运行时的指标基线如平均负载、内存使用峰值当指标偏离基线时及时排查。自动化监控脚本对个性化需求如特定目录文件数、应用响应时间编写Shell或Python脚本定期执行检查。监控权限与安全限制监控工具的权限如仅授予读取日志和指标的权限加密传输监控数据防止监控系统本身成为安全薄弱点。课后练习使用stress工具对系统进行CPU、内存、磁盘压力测试并使用top、sar、iotop进行监控。编写一个自定义systemd服务实现定时记录日志功能。配置SSH密钥认证实现免密登录。加固SSH服务禁止root登录、禁止密码登录、只允许特定用户登录。本文是课堂笔记整理如有错误欢迎指正交流持续更新中觉得有用的话记得点赞收藏