计算机理论基础
第一章:计算机的基本定义与组成结构
1.1 计算机的定义
计算机:能接受输入、处理数据、产生输出,且能自动、高速执行程序的电子设备。
核心流程(口诀:输→处→输→存,一步不差):
输入(外部数据) → 处理(CPU运算) → 输出(可理解结果) → 存储(持久化/临时存储)
记忆技巧:类比“厨房”——输入(食材)、处理(烹饪/CPU)、输出(饭菜)、存储(冰箱/硬盘),好记不混淆。
1.2 冯·诺依曼架构与五大单元
现代计算机都遵循冯·诺依曼体系结构,核心思想:
-
存储程序:程序和数据都以二进制形式存在内存中(不是硬盘,易错点!);
-
顺序执行:CPU按指令顺序,一条一条执行,不跳步、不混乱。
计算机硬件五大核心单元(结合运维场景,标注重点):
| 单元 | 核心功能(通俗解读) | 典型设备 | 运维关注点 |
|---|---|---|---|
| 输入单元 | 把外部信息(如键盘输入、网卡接收的数据)转成CPU能识别的二进制 | 键盘、鼠标、触摸屏、扫描仪、网卡(运维高频) | 网卡故障会导致输入异常,如无法接收网络数据 |
| 输出单元 | 把CPU处理后的二进制结果,转成人能看懂、设备能识别的形式 | 显示器、打印机、音响、投影机、硬盘(存储也是输出) | 硬盘输出异常,会导致数据写失败、文件损坏 |
| 内存(主存储器) | 临时“存放”正在运行的程序和数据,供CPU快速读取 | DRAM内存条(日常说的“内存”就是它) | 内存是运维高频故障点,不足会导致卡顿、OOM |
| 算术逻辑单元(ALU) | 负责所有计算(加减乘除)和逻辑判断(是/否、大于/小于) | CPU内部集成,不可单独更换 | ALU故障会导致CPU运算异常,表现为程序崩溃 |
| 控制单元(CU) | 相当于“大脑指挥官”,指挥所有组件协同工作(取指令、译码、执行) | CPU内部集成,不可单独更换 | CU故障会导致系统瘫痪,无法启动 |
1.3 数据流向与内存的关键地位
核心铁律(必背):所有数据必须经过内存!
-
CPU读取的数据,全部来自内存(不能直接读硬盘、网卡,易错点!);
-
内存中的数据,由输入单元(如网卡、键盘)传入;
-
CPU处理完的结果,必须先写回内存,再由内存输出到硬盘、显示器等设备。
为什么加大内存能显著提升性能?(运维高频疑问)
内存是CPU与外部存储(硬盘)之间的**唯一桥梁**,相当于“临时工作台”。内存太小,会出现3个问题:
1. 数据频繁在内存和硬盘间交换(swap,相当于“工作台不够,往地上堆东西”);
2. CPU经常空闲等待数据(“没东西可算,只能等”);
3. 系统响应变慢,甚至OOM(内存耗尽)杀进程(“工作台堆满,直接罢工”)。
记忆技巧:内存 = 厨房操作台,硬盘 = 冰箱;做饭时,必须把食材(数据)从冰箱(硬盘)拿到操作台(内存),厨师(CPU)才能加工,不能直接从冰箱里做饭。
第二章:中央处理器(CPU)深度解析
CPU是计算机的“大脑”,运维中CPU使用率高、虚拟化失败、性能瓶颈,都和CPU的核心特性相关。本节补充实操命令、易错点、记忆口诀,帮你快速掌握。
2.1 CPU的物理构成
CPU内部集成4个核心功能单元,不用记复杂原理,记“各自分工”即可:
| 组件 | 核心功能(通俗解读) | 特点(运维关注点) | 记忆口诀 |
|---|---|---|---|
| 算术逻辑单元(ALU) | 负责“计算”和“判断”,比如1+1、判断两个数大小 | CPU的“计算核心”,计算密集型任务(如编码、科学计算)依赖它 | 算得快,是核心 |
| 控制单元(CU) | 指挥CPU其他组件、以及整个计算机的硬件,按指令工作 | “指挥官”,故障会导致系统瘫痪,无法执行任何指令 | 管得多,总指挥 |
| 寄存器(Register) | 临时存储CPU正在处理的指令和数据(相当于“CPU的随身记事本”) | 速度最快(纳秒级),但容量极小(几十字节),运维无需直接操作 | 快如闪电,容量小 |
| 高速缓存(Cache) | 缓解CPU和内存的速度差距(CPU太快,内存跟不上,缓存当“缓冲”) | 分L1/L2/L3三级,缓存命中率越高,CPU性能越好(运维调优重点) | 中间缓冲,提速度 |
2.2 CPU的工作频率
核心公式(必背,运维选型、性能判断会用到):
主频 = 外频 × 倍频
| 术语 | 含义(通俗解读) | 说明(运维重点) |
|---|---|---|
| 外频 | CPU与外部组件(内存、主板)的通信速度 | 早期独立控制,现在大多集成在CPU内部,运维无法手动调整 |
| 倍频 | CPU内部的“加速倍数”,相当于“CPU的内部转速调节” | 提高倍频可提升性能,但会增加功耗和发热 |
| 主频 | CPU内部的实际工作频率,比如3.0GHz、2.5GHz | 主频越高,CPU单次运算速度越快(同架构下),是选型核心指标之一 |
现代特性(运维必知,避坑重点):
-
动态频率调整:Intel SpeedStep、AMD PowerNow!,系统会根据CPU负载自动调频(负载低时降频省电,负载高时升频提性能),服务器默认开启,无需手动干预;
-
超频:手动提高外频/倍频,强制提升主频。运维禁忌:服务器环境严禁超频!会导致功耗飙升、发热严重,降低稳定性,易引发硬件故障(如CPU烧毁、系统频繁重启)。
记忆技巧:主频 = 外频(外部通信速度)× 倍频(内部加速),好比“汽车速度 = 公路限速(外频)× 发动机加速(倍频)”,超频就是“超速行驶”,危险且伤设备。
2.3 指令集架构(ISA)(运维核心,软件部署必看)
指令集是CPU与软件之间的“接口”,相当于“CPU的语言”——软件必须用CPU能听懂的“语言”(指令集),才能运行。运维部署软件时,最容易踩的坑就是“指令集不兼容”。
2.3.1 复杂指令集(CISC)(日常最常用,重点记)
特点:“指令多而全,一条顶多条”,就像“中文”,一句话能表达复杂意思。
| 特性 | 说明(通俗解读) |
|---|---|
| 指令数量 | 多且复杂,包含数百条指令(好比中文有上万个汉字) |
| 单指令功能 | 强大,一条指令可完成复杂操作(比如“一次读取多个数据”,相当于中文“一句话说清一件复杂事”) |
| 指令长度 | 不固定(1-15字节),CPU译码复杂(好比解读长难句,费时间) |
| 执行周期 | 不固定,一条指令可能需要多个时钟周期完成(解读慢,执行也慢) |
| 代表架构 | x86、x86_64(AMD64)(运维最常用,服务器、PC主流) |
| 典型厂商 | Intel、AMD、VIA(VIA少见,重点记Intel、AMD) |
| 优势 | 软件生态极其丰富,兼容性好(几乎所有服务器、PC软件都支持,不用愁适配) |
| 劣势 | 功耗较高,设计复杂,单核心能效比低于RISC架构(同等功耗下,计算效率不如RISC) |
2.3.2 精简指令集(RISC)(新兴趋势,云服务器常用)
特点:“指令少而精,一条只做一件事”,就像“英文单词”,简单直接,不用复杂解读。
| 特性 | 说明(通俗解读) |
|---|---|
| 指令数量 | 少且精简,仅包含几十条核心指令(好比英文常用单词就几千个) |
| 单指令功能 | 简单,一条指令只做一件事(比如“仅读取一个数据”,相当于英文“一个单词表达一个意思”) |
| 指令长度 | 固定(通常4字节),CPU译码简单、快速(解读简单,不费时间) |
| 执行周期 | 大多一个时钟周期完成,执行效率高(解读快,执行也快) |
| 代表架构 | ARM、PowerPC、RISC-V、SPARC、MIPS(重点记ARM、RISC-V) |
| 优势 | 高能效比(性能/功耗),设计简单,适合移动设备、嵌入式、云服务器(AWS Graviton、阿里云ARM服务器都用它) |
| 劣势 | 复杂任务需多条指令组合完成(比如“读取多个数据”,需要多条指令),软件生态相对CISC较弱(但ARM、RISC-V生态正在快速崛起) |
2.3.3 x86与x86_64的由来(运维必懂,避坑关键)
很多运维新手分不清x86和x86_64,记住3句话,再也不踩坑:
-
x86名称起源:Intel最早推出的CPU代号为8086,后续陆续推出80286、80386、80486等,均基于同一架构,因此统称“x86架构”;
-
位数演进:x86架构从8位逐步升级为16位、32位(又称IA-32),32位是早期服务器、PC的主流;
-
64位扩展:AMD率先基于x86架构,推出64位扩展版本(称为AMD64),兼容32位软件;Intel随后跟进,推出相同功能的扩展(称为EM64T),现行业统称“x86_64”或“x64”,是现代服务器的标配架构。
易错点提醒:x86≠32位,x86_64≠64位——x86是架构名称,x86_64是x86架构的64位扩展;现在说的“x86服务器”,大多是x86_64架构(64位),32位x86服务器已基本淘汰。
2.4 常见CPU架构总览(运维选型、软件部署必看)
运维部署、硬件选型时,核心关注“架构兼容性”——不同架构的二进制程序不兼容,比如x86_64的软件,无法直接在ARM64服务器上运行,否则会报错。
2.4.1 按架构分类对比(运维高频,重点记前4个)
| 架构 | 类型 | 位数 | 核心应用场景(运维重点) | 是否开源 | 运维关注点 |
|---|---|---|---|---|---|
| x86 | CISC | 32位 | 传统PC、老旧服务器(如早期Windows Server 2003) | 否 | 仅支持≤4GB内存,现已逐步淘汰,遇到老设备需注意 |
| x86_64(x64) | CISC | 64位 | 现代PC、绝大多数服务器(Linux/Windows Server,运维最常用) | 否 | 主流架构,软件兼容性最好,支持海量内存,选型首选 |
| ARM | RISC | 32位 | 手机、嵌入式设备、IoT设备、低端路由器 | 否 | 低功耗,多用于边缘计算设备,运维接触较少 |
| ARM64(aarch64) | RISC | 64位 | 高端手机、云服务器(AWS Graviton、阿里云ARM服务器)、边缘计算 | 否 | 高能效比,云服务器场景逐步普及,部署软件需选aarch64版本 |
| MIPS | RISC | 32/64位 | 早期路由器、嵌入式设备、部分IoT设备 | 否 | 生态较弱,逐步被ARM、RISC-V替代,无需重点关注 |
| PowerPC | RISC | 32/64位 | 老旧Mac、早期游戏主机、部分高端服务器 | 否 | 现极少使用,仅部分老系统、专用设备保留,运维接触少 |
| RISC-V | RISC | 32/64位 | 定制芯片、学术研究、边缘计算、IoT设备 | ✅ 是 | 新兴架构,开源可定制,未来潜力大,运维需关注生态发展 |
| SPARC | RISC | 64位 | Oracle Unix服务器、大型工作站 | 否 | 专用架构,仅用于Oracle相关系统,运维接触较少 |
| Itanium(IA-64) | EPIC(显式并行) | 64位 | 已停产,早期高端服务器(HP、Intel) | 否 | 无运维价值,无需关注 |
2.4.2 按领域分类(快速选型参考,运维选型直接用)
| 应用领域 | 常见架构 | 选型建议(运维实操) |
|---|---|---|
| 个人电脑(PC) | x86、x86_64 | 优先x86_64,兼容性最好,日常办公、测试都适用 |
| 移动设备(手机、平板) | ARM、ARM64 | 无需运维干预,仅关注移动设备接入的网络问题即可 |
| 嵌入式设备、IoT | ARM、MIPS、RISC-V | 优先ARM(生态成熟,故障好排查),新设备可考虑RISC-V(开源,定制灵活) |
| 服务器(通用场景) | x86_64、ARM64 | 通用服务器(如Web服务器、数据库)选x86_64(兼容性好);云服务器、低功耗场景(如边缘节点)选ARM64(省电、高效) |
| 超算、定制芯片 | RISC-V、SPARC、PowerPC | 专用场景,按业务需求选型,运维需提前熟悉对应架构的特性和排查方法 |
兼容性提醒(运维必看,避坑关键):不同架构的二进制程序不兼容!例如x86_64的软件无法直接在ARM64服务器上运行,部署时需注意平台匹配,或使用模拟器(如QEMU)、交叉编译(提前编译对应架构的软件包)。
2.5 位数含义与内存寻址(运维选型核心,避免内存浪费)
CPU的“位数”,不是指CPU的物理大小,而是指CPU一次能读取/处理的最大数据宽度,直接决定内存寻址能力(能识别的最大内存容量)——这是运维选型内存时,最容易忽略的点。
| CPU位数 | 数据宽度 | 最大寻址空间(理论值) | 核心说明(通俗解读) | 运维注意事项 |
|---|---|---|---|---|
| 32位 | 32 bits(4字节) | 2^32 = 4GB | 32位操作系统、CPU,最多只能识别4GB内存——哪怕你插了8GB内存,也只能用4GB | 老旧服务器需注意,若内存超过4GB,需更换64位CPU和操作系统,否则内存浪费 |
| 64位 | 64 bits(8字节) | 2^64 ≈ 16EB(理论值,极大) | 实际受主板、操作系统限制,可支持TB级内存(比如服务器常用的32GB、64GB、128GB) | 现代服务器标配,部署64位OS,充分利用大内存优势,避免内存不足导致的卡顿 |
Linux查看系统/CPU位数(实操命令,必记):
# 查看系统位数(最常用,运维日常排查必用)
uname -m
# 输出x86_64 → 64位系统;输出i686 → 32位系统
# 查看CPU位数(更精准,确认CPU是否支持64位)
lscpu | grep "CPU op-mode(s)"
# 输出32-bit, 64-bit → CPU支持32/64位;仅输出32-bit → CPU仅支持32位
记忆技巧:32位=4GB上限,64位=无上限(实际看主板),好比“32位只能装4升水,64位能装无限升水(看水桶大小)”。
2.6 CPU微指令集(运维必知,虚拟化、性能调优重点)
现代x86 CPU会集成大量专用微指令集,相当于“CPU的专项技能”,用于加速特定任务(如虚拟化、多媒体、加密)。运维中,虚拟化部署、性能调优,必须关注这些指令集是否开启——否则会导致性能严重下降,甚至部署失败。
| 指令集类别 | Intel CPU | AMD CPU | 核心作用(运维重点) | 运维价值(优先级) |
|---|---|---|---|---|
| 多媒体/计算 | SSE、AVX、AVX2、AVX-512 | SSE、AVX、AVX2、AVX-512 | 加速多媒体编解码、科学计算、大数据分析(如Hadoop、Spark) | 高(大数据、视频处理场景必看) |
| 虚拟化 | VT-x(CPU虚拟化)、VT-d(I/O虚拟化) | AMD-V(CPU虚拟化)、IOMMU(I/O虚拟化) | 硬件级虚拟化支持,提升虚拟机(KVM、VMware)性能和安全性,无此指令集无法创建虚拟机 | 极高(虚拟化运维必查) |
| 加密/解密 | AES-NI、SHA-NI | AES-NI、SHA-NI | 硬件加速加密解密操作,提升SSL/TLS性能(如Nginx HTTPS、数据库加密) | 高(HTTPS、加密存储场景必看) |
| 节能/管理 | SpeedStep、Turbo Boost(睿频) | PowerNow!、Precision Boost(睿频) | 动态调频调压,平衡性能与功耗(负载低时省电,负载高时提性能) | 中(无需手动干预,了解即可) |
| 调试/监控 | Intel PT | AMD BPT | 指令跟踪,辅助故障排查和性能分析(如CPU异常占用时,跟踪指令执行) | 中(疑难故障排查时用到) |
2.7 运维实操:CPU微指令集查看与启用(必练,避免踩坑)
运维中,虚拟化部署(如KVM、VMware)、加密服务(如Nginx SSL)、大数据计算等场景,均需依赖对应微指令集,若未启用会导致性能严重下降,甚至部署失败。以下是Linux系统下的实操命令与注意事项,直接复制可用。
2.7.1 查看CPU支持的微指令集
通过命令可快速查看CPU支持的所有微指令集,重点关注虚拟化、加密相关指令集是否存在:
# 方法1:查看CPU详细信息,筛选核心微指令集(最全面,推荐)
cat /proc/cpuinfo | grep -E "vmx|svm|aes|avx|sha"
# 说明(必记):
# vmx → Intel CPU的VT-x 虚拟化指令集
# svm → AMD CPU的AMD-V 虚拟化指令集
# aes → AES-NI 加密指令集
# avx/avx2 → 多媒体/计算加速指令集
# sha → SHA-NI 哈希加速指令集
# 方法2:简洁查看,适合快速验证(运维日常排查用)
lscpu | grep -i "flags" | tr ' ' '\n' | grep -E "vmx|svm|aes|avx"
2.7.2 微指令集启用注意事项(运维避坑重点)
虚拟化指令集(VT-x/AMD-V)
需在主板 BIOS/UEFI 中启用,Intel 对应选项为 Intel Virtualization Technology,AMD 对应为 AMD SVM Mode。未启用会导致 KVM 无法创建虚拟机,报错:
could not open /dev/kvm: Permission denied
操作步骤:重启服务器 → 按 Del/F2 进入 BIOS → 找到虚拟化选项 → 设置为 Enabled → 保存并重启。
AES-NI/SHA-NI 指令集
默认自动启用,可通过 openssl 命令验证是否生效,生效后加密解密性能可提升 50% 以上。
# 验证 AES-NI 是否生效
openssl speed aes
输出中若出现 using aesni 表示已启用,无相关信息则未启用(需检查 CPU 是否支持)。
AVX 系列指令集
部分老旧操作系统(如 CentOS 6)默认禁用,可通过修改内核参数启用。适用于多媒体编解码、科学计算等业务场景,常规场景无需手动启用,系统会自动适配。
常见故障(运维高频)
部署虚拟机时若提示 CPU does not support virtualization,多为 BIOS 中未开启 VT-x/AMD-V,进入 BIOS 启用后重启服务器,再重新验证即可。
2.8 多核与超线程(运维性能判断重点)
很多运维新手分不清“物理核心”和“逻辑核心”,导致判断CPU性能失误——比如看到“CPU(s):8”,就以为是8个物理核心,实际可能是4个物理核心+超线程。
2.8.1 物理核心与逻辑核心(通俗解读)
| 概念 | 说明(通俗解读) | 查看方式(Linux,必记命令) |
|---|---|---|
| 物理核心 | CPU内部实际的核心数,相当于“真实的厨师数量”,每个物理核心能独立执行任务 | lscpu 中 "Core(s) per socket"(每颗CPU的物理核心数) |
| 逻辑核心 | 通过超线程技术,在1个物理核心上虚拟出的核心数,相当于“给每个厨师配了一个助手”,能辅助处理简单任务 | lscpu 中 "CPU(s)"(总逻辑核心数) |
| 超线程(HT) | Intel的技术(AMD称为SMT),1个物理核心模拟2个逻辑核心,提升CPU的并发处理能力 | lscpu |
2.8.2 超线程的实际效果(运维性能判断)
超线程不是“越多越好”,效果取决于业务类型,记住2个核心结论:
-
I/O密集型任务(如Web服务器、数据库、Nginx):超线程提升明显(助手能帮厨师处理简单任务,提高效率),通常能提升30%-50%的并发能力;
-
计算密集型任务(如科学计算、视频编码、大数据运算):超线程提升有限,有时甚至会下降(助手和厨师抢资源,反而拖慢速度)。
记忆技巧:物理核心=真实厨师,逻辑核心=厨师助手;I/O密集型=厨师经常等食材(空闲多),助手能帮忙;计算密集型=厨师一直忙,助手反而添乱。
2.9 CPU缓存体系(性能优化重点,理解缓存命中率)
缓存是CPU和内存之间的“缓冲地带”,采用SRAM(静态随机存取存储器),速度远快于内存(DRAM)——CPU读取数据时,会先从缓存中找,找不到再去内存中找,缓存命中率越高,CPU性能越好。
2.9.1 三级缓存结构(L1/L2/L3)
| 缓存级别 | 容量(常见范围) | 延迟(参考值) | 特点(运维关注点) |
|---|---|---|---|
| L1缓存 | 32KB~64KB/核心(每核心独享) | ~1ns(和CPU寄存器速度接近) | 分指令缓存(L1i,存指令)和数据缓存(L1d,存数据),命中率最高,是CPU优先读取的地方 |
| L2缓存 | 256KB~1MB/核心(每核心独享) | ~3-5ns(比L1慢,比L3快) | 容量比L1大,缓存L1中没有的数据,命中率次之 |
| L3缓存 | 几MB~几十MB(多核心共享) | ~10-20ns(比L2慢,比内存快) | 容量最大,缓存L1、L2中没有的数据,多核心共享,对数据库、编译器等应用影响巨大(大L3缓存=高命中率) |
2.9.2 缓存命中率(运维性能优化核心)
缓存命中率 = 缓存中找到的数据量 ÷ CPU读取的数据总量,命中率越高,CPU等待数据的时间越短,性能越好。
运维优化建议:
-
数据库、Redis等高频读取数据的应用,尽量将热点数据放入内存,提升缓存命中率;
-
选型CPU时,计算密集型、数据库场景,优先选L3缓存大的型号(如Intel Xeon系列、AMD EPYC系列);
-
避免频繁切换进程(进程切换会清空缓存),减少缓存失效。
记忆技巧:缓存级别越高(L1→L3),速度越慢、容量越大,好比“CPU的随身口袋(L1)→ 桌面(L2)→ 储物柜(L3)”,找东西优先从口袋找,找不到再找桌面、储物柜。
2.10 CPU故障排查核心思路(运维高频,必练)
运维中CPU相关故障主要表现为“CPU使用率过高”“系统响应缓慢”“虚拟机启动失败”,核心排查思路可分为“现象定位→原因分析→解决方案”三步,结合实操命令快速定位问题,不用盲目排查。
2.10.1 第一步:定位CPU异常现象(用命令快速锁定)
通过以下命令查看CPU整体负载和异常进程,明确故障范围(命令必记,日常排查常用):
# 1. 查看CPU实时负载(最常用,top命令是运维必备)
top # 按P键按CPU使用率排序,识别占用CPU最高的进程
# 关键指标(必懂):
# %us(用户态):应用程序占用CPU的比例(如Nginx、MySQL)
# %sy(系统态):内核进程占用CPU的比例(如系统调用、中断)
# %id(空闲CPU):CPU空闲比例
# 异常判断:%us + %sy > 80% 且持续5分钟以上,说明CPU负载过高,需进一步排查
# 补充操作:按M键按内存占用排序,排除“内存不足导致CPU代偿性占用”的情况
# 2. 查看CPU负载趋势(避免瞬时负载误判)
uptime # 查看1分钟、5分钟、15分钟的CPU平均负载
# 异常判断:若15分钟平均负载 > CPU逻辑核心数,说明CPU长期处于高负载状态
# 示例:逻辑核心数为8,15分钟负载为9.2,说明CPU已过载
# 3. 查看进程CPU占用详情(精准定位异常进程)
ps -aux --sort=-%cpu | head -10 # 查看CPU占用前10的进程
# 关键参数解读:
# %cpu:进程占用CPU的比例
# COMMAND:进程名称(如java、nginx、mysqld)
# USER:进程所属用户(如root、mysql)
# 重点关注:无名进程、占用CPU持续>50%的异常进程(排除正常业务进程)
# 1. 查看CPU实时负载(最常用,top命令是运维必备)
top # 按P键按CPU使用率排序,识别占用CPU最高的进程
# 关键指标(必懂):
# %us(用户态):应用程序占用CPU的比例(如Nginx、MySQL)
# %sy(系统态):内核进程占用CPU的比例(如系统调用、中断)
# %id(空闲CPU):CPU空闲比例
# 异常判断:%us + %sy > 80% 且持续5分钟以上,说明CPU负载过高,需进一步排查
# 补充操作:按M键按内存占用排序,排除“内存不足导致CPU代偿性占用”的情况
# 2. 查看CPU负载趋势(避免瞬时负载误判)
uptime # 查看1分钟、5分钟、15分钟的CPU平均负载
# 异常判断:若15分钟平均负载 > CPU逻辑核心数,说明CPU长期处于高负载状态
# 示例:逻辑核心数为8,15分钟负载为9.2,说明CPU已过载
# 3. 查看进程CPU占用详情(精准定位异常进程)
ps -aux --sort=-%cpu | head -10 # 查看CPU占用前10的进程
# 关键参数解读:
# %cpu:进程占用CPU的比例
# COMMAND:进程名称(如java、nginx、mysqld)
# USER:进程所属用户(如root、mysql)
# 重点关注:无名进程、占用CPU持续>50%的异常进程(排除正常业务进程)
2.10.2 第二步:原因分析(对应现象,精准找根因)
CPU异常的核心原因可分为4类,结合现象快速匹配,避免盲目排查,每类均补充运维高频场景案例:
| 异常现象 | 常见原因 | 运维场景案例 |
|---|---|---|
| %us过高(用户态占用高) | 1. 业务进程异常(死循环、代码bug);2. 计算密集型任务过载;3. 进程泄露 | 1. Java程序存在死循环,导致java进程CPU占用100%;2. 大数据任务(如Spark计算)并发过高,超出CPU承载;3. 爬虫程序未限制并发,进程数量暴增 |
| %sy过高(系统态占用高) | 1. 内核进程异常;2. 中断风暴;3. 系统调用频繁;4. 虚拟化配置不当 | 1. 网卡中断风暴(如大量网络请求涌入,导致irq进程占用CPU过高);2. 频繁调用fork()函数,导致系统调用次数暴增;3. KVM虚拟机配置过多,内核调度压力大 |
| 虚拟机启动失败 | 1. 虚拟化指令集未启用;2. CPU不支持虚拟化;3. 虚拟机CPU配置超出物理CPU | 1. 主板BIOS未启用VT-x/AMD-V,部署KVM时提示“CPU does not support virtualization”;2. 老旧CPU不支持虚拟化,无法创建虚拟机;3. 物理CPU只有4核,虚拟机配置8核,启动失败 |
| CPU使用率波动大 | 1. 业务流量波动;2. 定时任务执行;3. 缓存失效;4. 动态调频影响 | 1. 电商平台秒杀活动,流量骤增导致CPU使用率飙升;2. 每天凌晨3点的备份任务,触发CPU瞬时高负载;3. Redis缓存失效,大量请求穿透到数据库,导致CPU占用波动 |
易错点提醒:不要仅凭“CPU使用率100%”就判定故障——若%id=0,但业务响应正常(如计算密集型任务正常执行),无需处理;若CPU使用率不高,但系统响应缓慢,需排查缓存命中率、内存是否不足(内存不足会导致CPU代偿性工作)。
2.10.3 第三步:解决方案(针对性处理,快速恢复)
结合原因分析,对应给出可直接操作的解决方案,补充运维实操命令,避免“只说理论不教操作”,按“紧急恢复→长期优化”分类,符合运维工作逻辑:
一、紧急恢复(优先解决当前故障,避免业务中断)
-
进程异常导致%us过高:
- 终止异常进程(需确认进程无业务影响,避免误杀):
kill -9 进程ID(进程ID可通过ps、top命令获取); - 若进程是核心业务(如MySQL),先重启业务服务:
systemctl restart mysqld,再排查代码bug或配置问题; - 临时限制进程CPU占用(避免进程耗尽CPU):
cpulimit -l 50 -p 进程ID(限制进程最多占用50%CPU)。
- 终止异常进程(需确认进程无业务影响,避免误杀):
-
系统态%sy过高(中断风暴为例):
- 查看中断占用情况:
top -H -p $(pgrep irqbalance),找到占用CPU最高的中断号; - 绑定中断到指定CPU核心(分散压力):
echo 2 > /proc/irq/中断号/smp_affinity_list(将中断绑定到2号核心); - 若为网卡中断,可开启网卡多队列(需硬件支持),分散中断压力。
- 查看中断占用情况:
-
虚拟机启动失败:
- 验证CPU是否支持虚拟化:
cat /proc/cpuinfo | grep -E "vmx|svm",无输出则说明CPU不支持,需更换硬件; - 若支持虚拟化,重启服务器进入BIOS,启用VT-x/AMD-V,重启后重新创建虚拟机;
- 调整虚拟机CPU配置,确保不超过物理CPU核心数(如物理CPU4核,虚拟机配置不超过4核)。
- 验证CPU是否支持虚拟化:
二、长期优化(避免故障重复发生,提升CPU稳定性)
-
业务层面优化:
- 优化代码:修复死循环、减少无效计算,避免进程泄露(如Java程序优化垃圾回收机制);
- 限制并发:对爬虫、大数据等CPU密集型任务,设置并发上限(如通过nginx限制请求数);
- 定时任务优化:将高负载定时任务(如备份、计算)分散执行,避免集中占用CPU。
-
系统层面优化:
- 关闭不必要的服务和进程,减少CPU资源占用(如关闭无用的系统守护进程);
- 优化CPU调度:对于多核服务器,合理分配进程到不同核心(避免单一核心过载);
- 关闭超频(服务器环境),开启动态调频(SpeedStep/PowerNow!),平衡性能与稳定性。
-
硬件/选型优化:
- 计算密集型、数据库场景,选型L3缓存大、多核的CPU(如Intel Xeon、AMD EPYC);
- 虚拟化场景,选择支持VT-x/AMD-V、IOMMU的CPU,提升虚拟机性能;
- 高并发场景,增加CPU核心数或部署负载均衡(如Nginx负载均衡),分散CPU压力。
2.10.4 故障排查总结(口诀记忆,快速调用)
CPU故障排查口诀(记熟,运维应急时直接用):一看负载定异常,二查进程找根因,三判类型分场景,四解故障保稳定。
核心逻辑:先通过top、uptime等命令定位异常现象,再通过ps、lscpu等命令找到根因,区分用户态、系统态、虚拟化等不同场景,先紧急恢复业务,再做长期优化,避免“头痛医头、脚痛医脚”。
第三章:内存(主存储器)深度解析(运维高频故障点,重点突破)
内存是计算机的“临时工作台”,也是运维中故障最高发的组件之一——系统卡顿、OOM杀进程、程序崩溃,大多与内存不足、内存泄漏、内存配置不当相关。本节结合运维实操,补充内存原理、故障排查、优化技巧,帮你彻底搞定内存相关问题,摆脱“内存不足就加内存”的误区,同时兼顾易记、实用,贴合运维日常工作场景。
3.1 内存的核心定义与作用(通俗解读,不记专业术语)
内存(主存储器,核心为DRAM):临时存储正在运行的程序和数据,供CPU快速读取,是CPU与外部存储(硬盘、SSD)之间的唯一桥梁。记住运维核心铁律(刻在脑子里):所有数据必须经过内存,CPU不能直接读取硬盘。
通俗类比(好记不混淆):内存 = 厨房操作台,硬盘/SSD = 冰箱,CPU = 厨师;做饭时,必须把食材(数据)从冰箱(硬盘)拿到操作台(内存),厨师(CPU)才能加工,不能直接从冰箱里做饭;操作台(内存)越大,能同时处理的食材(数据)越多,做饭效率(系统性能)越高;一旦操作台堆满(内存不足),厨师只能频繁往返冰箱(硬盘)拿食材,效率骤降(系统卡顿)。
运维核心关注点:内存的容量、读写速度、稳定性,以及内存的实际使用情况(是否不足、是否有泄漏、是否有异常进程占用),这些直接决定系统的响应速度和业务稳定性,也是运维日常排查的重点。
3.2 内存的分类(运维必知,区分不同内存类型)
运维中常见的内存类型有3种,重点区分“物理内存、虚拟内存、缓存内存”,避免混淆(很多运维新手踩坑的根源),每种类型均结合运维场景说明用途、特点和关注点,搭配对比表,一目了然。
| 内存类型 | 核心作用(通俗解读) | 常见规格/速度 | 运维关注点 |
|---|---|---|---|
| 物理内存(RAM) | 真实的硬件内存(如DDR4、DDR5内存条),临时存储正在运行的程序和数据,速度快、断电丢失(相当于“真正的操作台”)。 | 服务器常见容量:16GB、32GB、64GB、128GB;速度:DDR4(2133-3200MHz)、DDR5(4800-6400MHz)。 | 核心关注容量和使用率,不足会导致OOM(内存耗尽)、系统卡顿、业务进程被杀死,是运维排查的核心。 |
| 虚拟内存(Swap) | 将硬盘/SSD的一部分空间模拟成内存,当物理内存不足时,临时存放不常用的数据(相当于“临时备用操作台”),缓解物理内存压力。 | 常见大小:物理内存的1-2倍(如16GB物理内存,Swap设为16-32GB);速度:远慢于物理内存(受硬盘/SSD速度限制)。 | Swap使用率过高会导致系统卡顿(数据在物理内存和Swap间频繁切换,耗时久),需合理配置大小,避免频繁使用。 |
| 缓存内存(Cache/Buffer) | 系统自动分配的内存,用于缓存硬盘数据、文件目录、常用指令,提升数据读取速度(相当于“操作台旁边的小抽屉,放常用食材”)。 | 无固定大小,由系统动态分配(物理内存空闲时自动增加,内存不足时自动释放)。 | 缓存内存高是正常现象,并非内存不足,释放后可用于其他程序,无需担心;反而缓存过低,说明系统读取效率低。 |
易错点提醒:很多运维新手看到“内存使用率90%+”,就误以为内存不足,实则可能是缓存内存(Cache/Buffer)占用过高——这是系统的优化机制,不是故障,可通过命令手动释放缓存,无需扩容内存。
3.3 内存运维实操命令(必记,直接复制使用)
运维日常工作中,内存相关的实操命令主要用于“查看内存使用情况、排查异常占用、释放缓存、配置Swap”,以下命令均为Linux系统常用,直接复制即可执行,标注核心参数解读,避免记混。
3.3.1 查看内存整体使用情况(最常用,日常排查必用)
# 方法1:查看内存总量、使用量、缓存、Swap等(推荐,直观清晰)
free -h
# 核心参数解读(必懂,避免误解):
# total:物理内存总量(如16Gi)
# used:已使用内存(含进程占用+缓存+缓冲)
# free:完全空闲的内存(很少,正常)
# shared:共享内存(一般忽略)
# buff/cache:缓存+缓冲内存(可随时释放)
# available:实际可用内存(关键!= free + buff/cache,真正能给新进程使用的内存)
# 方法2:查看内存使用详情(更全面,含内存类型占比)
vmstat -s
# 重点关注:
# 1. total memory:物理内存总量
# 2. used memory:已使用内存(不含缓存)
# 3. active memory:活跃内存(正在使用,不可释放)
# 4. inactive memory:非活跃内存(可释放,用于缓存)
3.3.2 查看进程内存占用(精准定位异常进程)
# 方法1:按内存占用排序,查看前10个进程(最常用)
ps -aux --sort=-%mem | head -10
# 核心参数解读:
# %mem:进程占用内存的比例
# RES:进程常驻物理内存(实际占用的物理内存大小,重点关注)
# VIRT:进程虚拟内存总量(含物理内存+Swap+共享内存,参考即可)
# COMMAND:进程名称(如java、nginx、mysqld,定位异常进程)
# 方法2:实时查看进程内存占用(动态监控)
top # 按M键,按内存占用排序
# 重点关注:RES(常驻内存)、%MEM(内存占比),排查占用过高的异常进程
3.3.3 释放缓存内存(临时解决缓存过高问题)
# 释放页缓存(最常用,不影响业务进程)
echo 1 > /proc/sys/vm/drop_caches
# 释放页缓存+目录项缓存+inode缓存(彻底释放,谨慎使用)
echo 3 > /proc/sys/vm/drop_caches
# 注意事项(必看):
# 1. 释放缓存仅为临时操作,系统会重新缓存常用数据,无法彻底解决缓存过高问题;
# 2. 不影响正在运行的业务进程,可放心执行;
# 3. 若释放后内存使用率仍高,说明是进程实际占用过高,需排查异常进程,而非缓存问题。
3.3.4 Swap相关操作(配置、查看、关闭)
# 1. 查看Swap使用情况
free -h # 查看Swap的total、used、free
swapon -s # 查看Swap分区详情(路径、大小、使用率)
# 2. 临时关闭Swap(缓解Swap频繁使用导致的卡顿,重启失效)
swapoff /dev/sda2 # 替换为自己的Swap分区路径(可通过swapon -s查看)
# 3. 临时开启Swap
swapon /dev/sda2
# 4. 永久关闭Swap(需修改配置文件,谨慎使用)
# 编辑/etc/fstab,注释掉Swap相关行,保存后执行:
swapoff -a
# 5. 配置Swap大小(若未配置Swap,或大小不合理)
fallocate -l 16G /swapfile # 创建16GB的Swap文件
chmod 600 /swapfile # 设置权限(避免其他用户访问)
mkswap /swapfile # 格式化Swap文件
swapon /swapfile # 临时启用
# 永久启用:编辑/etc/fstab,添加一行:/swapfile swap swap defaults 0 0
3.4 内存故障排查(运维高频,现象→原因→解决方案)
内存故障的核心表现的有4种:系统卡顿、OOM杀进程、Swap使用率过高、内存泄漏,按“现象定位→原因分析→解决方案”的逻辑排查,结合实操命令,快速解决问题,避免业务中断,每类故障均补充运维高频案例。
3.4.1 故障1:系统卡顿,内存使用率高
现象:系统响应缓慢,SSH连接卡顿,top命令查看内存使用率>90%,free内存极低。
原因分析(按优先级排序): 1. 缓存内存过高(最常见,非故障); 2. 业务进程异常,占用大量物理内存(如Java程序内存泄漏、死循环); 3. 物理内存容量不足,无法满足业务需求; 4. Swap频繁使用(内存不足导致数据频繁切换)。
解决方案(先紧急恢复,再长期优化): 1. 紧急恢复:释放缓存(执行echo 3 > /proc/sys/vm/drop_caches),查看内存是否恢复;若仍高,排查异常进程(ps -aux --sort=-%mem),终止无用进程(kill -9 进程ID),或重启核心业务服务(systemctl restart 服务名); 2. 长期优化:若为缓存过高,无需特殊处理(系统正常优化);若为进程异常,排查代码bug(如Java内存泄漏);若为内存不足,扩容物理内存。
3.4.2 故障2:OOM(内存耗尽),进程被杀死
现象:系统日志提示“Out of memory: Kill process XXX”,核心业务进程(如MySQL、Nginx)被自动杀死,业务中断。
原因分析: 1. 物理内存+Swap全部耗尽,系统为了保证自身运行,自动杀死占用内存最高的进程; 2. 业务进程内存配置过高(如Java的-Xmx参数设置过大,超出物理内存); 3. 进程内存泄漏(程序持续占用内存,不释放,长期运行后耗尽内存)。
解决方案: 1. 紧急恢复:重启被杀死的业务进程(systemctl restart 服务名),临时释放内存(关闭无用进程、释放缓存),确保业务先恢复; 2. 排查根因:查看系统日志(dmesg | grep -i oom),找到被杀死的进程,分析其内存占用原因; 3. 长期优化:调整业务进程内存配置(如减小Java的-Xmx参数,使其不超过物理内存的70%);修复内存泄漏问题;扩容物理内存或增加Swap(临时缓解)。
3.4.3 故障3:Swap使用率过高(>50%)
现象:free -h查看Swap used占比>50%,系统卡顿,进程响应缓慢,vmstat查看si(Swap换入)、so(Swap换出)持续>0。
原因分析: 1. 物理内存不足,系统频繁将物理内存中的不常用数据换入Swap; 2. swappiness参数设置过高(默认60),系统倾向于使用Swap,即使物理内存有空闲; 3. 存在内存泄漏进程,持续占用物理内存,导致系统被迫使用Swap。
解决方案: 1. 紧急恢复:临时关闭Swap(swapoff -a),释放物理内存,再重新开启(swapon -a),缓解卡顿; 2. 调整swappiness参数(临时生效):echo 10 > /proc/sys/vm/swappiness(数值越小,系统越倾向于使用物理内存,推荐设置10-20); 3. 长期优化:永久修改swappiness(编辑/etc/sysctl.conf,添加vm.swappiness=10,执行sysctl -p生效);排查内存泄漏进程;扩容物理内存。
3.4.4 故障4:内存泄漏(长期运行后内存使用率逐渐升高)
现象:系统刚启动时内存使用率正常(如30%),运行几天/几周后,内存使用率逐渐升至90%以上,重启服务后恢复正常,反复出现。
原因分析:业务程序存在内存泄漏(如Java程序未释放对象、C程序未释放指针),持续占用内存,不主动释放,长期积累后耗尽内存。
解决方案: 1. 定位内存泄漏进程:通过ps -aux --sort=-%mem,找到长期运行、内存占用持续升高的进程; 2. 分析内存泄漏原因:使用专业工具排查(如Java用jmap、jhat,C程序用valgrind),找到未释放的内存对象/指针; 3. 修复问题:提交开发人员,修复程序bug,重新部署业务服务; 4. 临时缓解:设置定时任务,定期重启业务服务(如每天凌晨3点重启,避免内存耗尽),但需尽快修复根因。
排查口诀(记熟,应急时直接用):内存卡顿先看缓存,OOM先查被杀进程,Swap过高调参数,内存泄漏找长期进程。
3.5 内存优化技巧(避免故障重复发生,提升稳定性)
内存优化的核心是“合理分配、避免浪费、预防泄漏”,结合运维实操,总结5个高频优化技巧,无需复杂操作,就能有效提升内存利用率,减少故障发生。
3.5.1 合理配置物理内存(选型优化)
根据业务类型,合理选型物理内存容量,避免“不足”或“浪费”: 1. 通用Web服务器(Nginx、Apache):16-32GB(支持高并发,避免缓存不足); 2. 数据库服务器(MySQL、PostgreSQL):32-128GB(大内存提升缓存命中率,减少磁盘IO); 3. 大数据/计算密集型(Spark、Hadoop):64-256GB(多任务并行,需要大量内存); 4. 小型应用/测试服务器:8-16GB(满足基础需求即可)。
3.5.2 优化Swap配置(避免频繁使用)
1. Swap大小配置:物理内存≤8GB,设为物理内存的2倍;物理内存8-16GB,设为物理内存的1-1.5倍;物理内存>16GB,设为8-16GB(无需过大,避免占用过多硬盘空间); 2. 调整swappiness参数:推荐设置为10-20,减少系统对Swap的依赖,优先使用物理内存; 3. 高性能场景(如数据库、高并发Web):可关闭Swap,避免Swap使用导致的性能下降(前提是物理内存充足)。
3.5.3 优化业务进程内存配置
1. Java程序:合理设置-Xms(初始内存)、-Xmx(最大内存),推荐-Xmx不超过物理内存的70%(如16GB物理内存,-Xmx设为10-12GB),避免内存配置过大,导致系统内存不足; 2. 数据库(MySQL):优化innodb_buffer_pool_size(InnoDB缓存大小),推荐设为物理内存的50-70%,提升数据库读取速度,减少内存浪费; 3. 关闭无用进程:禁止在服务器上运行无关进程(如桌面程序、娱乐软件),减少内存占用。
3.5.4 预防内存泄漏(长期优化)
1. 定期排查:每周查看进程内存占用趋势(用vmstat、top),及时发现内存持续升高的进程; 2. 规范部署:要求开发人员提交程序时,附带内存泄漏测试报告,避免有bug的程序上线; 3. 定时重启:对于无法短期内修复的内存泄漏程序,设置定时重启任务(如每天凌晨,业务低峰期),临时缓解内存压力。
3.5.5 利用缓存提升内存利用率
1. 开启系统缓存:无需手动配置,系统默认开启,缓存常用数据、文件目录,提升读取速度; 2. 部署应用缓存:对于高频访问的数据(如Web页面、数据库查询结果),部署Redis、Memcached等缓存工具,将数据缓存到内存中,减少数据库压力,提升内存利用率; 3. 避免缓存滥用:不盲目缓存大量不常用数据,避免占用过多内存,导致有用数据被换入Swap。
3.6 章节总结(核心记忆点)
1. 核心铁律:所有数据必须经过内存,CPU不能直接读取硬盘; 2. 三大内存类型:物理内存(核心)、Swap(备用)、缓存(优化),区分清楚,避免混淆; 3. 高频故障:内存不足、OOM、Swap过高、内存泄漏,按“现象→原因→解决方案”排查; 4. 实操重点:记熟free、ps、top、vmstat等命令,能快速定位异常、释放缓存、配置Swap; 5. 优化核心:合理选型、配置参数、预防泄漏,提升内存利用率,减少故障。
第四章:存储系统深度解析
存储系统是服务器稳定运行的核心支撑,运维工作中,除了内存,硬盘、RAID阵列的配置、故障排查更是高频工作——业务数据丢失、存储性能瓶颈、硬盘损坏等问题,均与存储系统直接相关。本章重点讲解存储系统的核心逻辑、RAID阵列(运维必备)、存储设备运维,结合实操命令和故障案例,兼顾易记性和实用性,贴合运维日常工作场景。
4.1 存储系统核心逻辑(通俗解读)
存储系统的核心作用是持久化保存数据,与内存(临时存储)形成互补——内存负责临时存放运行中的数据,存储系统(硬盘、SSD、RAID阵列)负责长期保存数据(如业务日志、用户数据、数据库文件)。
通俗类比:存储系统 = 家里的“储物柜”,内存 = 手里的“临时托盘”;托盘(内存)用于临时放置正在使用的物品(数据),储物柜(存储系统)用于长期存放不常用的物品(数据),而RAID阵列就是“带锁的组合储物柜”,既提升存储安全性,又能提升存取速度。
运维核心关注点:存储系统的可靠性(避免数据丢失)、性能(满足业务读写需求)、可维护性(硬盘损坏后可快速更换,不影响业务)。
4.2 RAID阵列详解(运维重点,必学)
RAID(独立磁盘冗余阵列)是将多个物理硬盘组合成一个逻辑磁盘,通过数据分片、镜像、校验等方式,实现数据冗余(避免单块硬盘损坏导致数据丢失)和性能提升(多块硬盘并行读写),是服务器存储的核心配置,也是运维高频操作点。
4.2.1 RAID核心作用(记2点即可)
-
数据冗余:通过镜像、校验等方式,单块(或多块,根据RAID级别)硬盘损坏,数据不丢失,保障业务连续性;
-
性能提升:多块硬盘并行读写,提升数据传输速度,缓解存储IO瓶颈(如数据库服务器、大数据存储场景)。
4.2.2 常用RAID级别对比(运维高频,重点掌握这4种)
不同RAID级别适用于不同业务场景,无需记所有级别,重点掌握以下4种(覆盖90%以上运维场景),搭配对比表,一目了然,避免混淆:
| RAID级别 | 硬盘数量要求 | 核心特点(冗余+性能) | 适用场景 | 运维关注点 |
|---|---|---|---|---|
| RAID 0 | 最少2块 | 无冗余(一块硬盘损坏,全部数据丢失);读写速度最快,容量=所有硬盘总和 | 对数据安全性无要求,追求速度(如临时缓存、测试环境) | 禁止用于生产环境(无冗余),损坏后无法恢复数据 |
| RAID 1 | 最少2块(偶数块) | 镜像冗余(两块硬盘数据完全一致);读写速度与单块硬盘相当,容量=单块硬盘容量 | 对数据安全性要求高,读写量不大(如系统盘、小型数据库) | 一块硬盘损坏,更换新硬盘后自动同步数据,无需手动恢复 |
| RAID 5 | 最少3块 | 校验冗余(单块硬盘损坏可恢复);读写速度均衡,容量=(硬盘数量-1)×单块容量 | 最常用,适用于生产环境(如Web服务器、数据库服务器) | 重点监控硬盘状态,损坏后及时更换,避免多块硬盘同时损坏 |
| RAID 10 | 最少4块(偶数块) | RAID 0+RAID 1组合,既有冗余(镜像),又有速度(并行读写);容量=(硬盘数量/2)×单块容量 | 高要求场景(如高并发数据库、核心业务存储) | 成本较高,需监控每块硬盘状态,允许单组内一块硬盘损坏 |
易错点提醒:RAID不是“万能保险”——RAID 5允许单块硬盘损坏,RAID 10允许每组内单块损坏,若多块硬盘同时损坏(如RAID 5同时坏2块),数据仍会丢失;且RAID仅解决硬盘损坏问题,无法防范误删除、病毒攻击等数据丢失场景。
4.2.3 RAID运维实操(常用命令+故障处理)
运维中,RAID的核心操作是“查看状态、更换故障硬盘、重建阵列”,以下命令均为Linux系统常用,直接复制执行即可:
# 1. 查看RAID阵列状态(最常用,判断是否有故障)
mdadm -D /dev/md0 # /dev/md0为RAID设备路径,可通过ls /dev/md*查看
# 2. 查看所有RAID阵列信息
cat /proc/mdstat
# 3. 检查硬盘状态(判断是否有故障硬盘)
smartctl -a /dev/sda # /dev/sda为硬盘设备,替换为实际路径
# 重点关注:Smart Health Status: PASSED(正常)/ FAILED(故障)
# 4. 更换故障硬盘(以RAID 5为例)
# 步骤1:标记故障硬盘为失效
mdadm /dev/md0 --fail /dev/sdb # /dev/sdb为故障硬盘
# 步骤2:移除故障硬盘
mdadm /dev/md0 --remove /dev/sdb
# 步骤3:插入新硬盘,添加到RAID阵列,自动重建
mdadm /dev/md0 --add /dev/sdb
# 步骤4:查看重建进度
mdadm -D /dev/md0 # 查看Rebuild Status进度
# 5. 创建RAID阵列(以RAID 5为例,3块硬盘)
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc
# 格式化并挂载
mkfs.xfs /dev/md0
mount /dev/md0 /data # /data为挂载目录
4.2.4 RAID常见故障及解决方案
| 故障现象 | 常见原因 | 解决方案 |
|---|---|---|
| RAID阵列降级(Degraded) | 单块硬盘损坏、硬盘松动、硬盘接触不良 | 1. 检查硬盘状态(smartctl命令);2. 松动则重新插拔,损坏则更换新硬盘;3. 添加新硬盘到阵列,等待重建完成 |
| RAID重建失败 | 新硬盘容量小于原硬盘、硬盘不兼容、阵列配置文件损坏 | 1. 确保新硬盘容量≥原硬盘;2. 更换兼容型号硬盘;3. 若配置文件损坏,通过备份恢复或重新创建阵列(注意备份数据) |
| RAID阵列无法识别 | RAID控制器故障、阵列配置丢失、硬盘全部损坏 | 1. 检查RAID控制器(硬件);2. 恢复阵列配置(若有备份);3. 若硬盘全部损坏,需通过数据恢复工具尝试恢复数据 |
4.3 外部存储设备运维(硬盘/SSD)
除了RAID阵列,服务器常用的外部存储设备为机械硬盘(HDD)和固态硬盘(SSD),两者的运维重点不同,需针对性管理,避免故障扩大:
4.3.1 机械硬盘(HDD)运维
核心特点:容量大、成本低、速度慢、易受震动影响,故障多为物理损坏(如电机故障、坏道)。
运维重点: 1. 定期检查坏道:badblocks -v /dev/sda(扫描坏道,避免数据写入坏道); 2. 避免服务器震动(如移动服务器时先关机); 3. 监控硬盘温度(正常温度30-45℃),过高会导致坏道增多,可通过smartctl -a /dev/sda | grep Temperature查看。
4.3.2 固态硬盘(SSD)运维
核心特点:速度快、无机械部件、抗震,故障多为闪存磨损、掉电损坏。
运维重点: 1. 查看闪存磨损程度:smartctl -a /dev/nvme0n1(NVMe接口SSD),重点关注“Remaining Life”(剩余寿命),低于20%需及时更换; 2. 避免频繁掉电(SSD掉电易导致数据丢失); 3. 不建议对SSD进行碎片整理(会加速闪存磨损),定期清理无用数据即可。
4.3.3 硬盘故障排查核心技巧
1. 快速判断硬盘是否故障:smartctl -H /dev/sda,返回“SMART overall-health self-assessment test result: PASSED”为正常; 2. 若硬盘出现异响、读写缓慢,优先备份数据,再检查坏道或磨损情况; 3. 生产环境中,建议给硬盘配置热备盘(如RAID阵列添加热备盘),故障时自动替换,减少业务中断时间。
4.4 存储系统优化(运维实操,减少故障)
存储系统优化的核心是“提升性能、保障数据安全、降低维护成本”,结合运维场景,总结4个高频优化技巧:
4.4.1 选型优化
1. 核心业务(如数据库):选用SSD+RAID 10,兼顾速度和冗余; 2. 普通业务(如日志存储):选用HDD+RAID 5,平衡成本和安全性; 3. 临时缓存、测试数据:选用RAID 0或单块SSD,追求速度即可。
4.4.2 日常维护优化
1. 定期检查:每周查看RAID状态、硬盘健康度,及时更换即将损坏的硬盘; 2. 数据备份:即使有RAID冗余,也要定期备份核心数据(如每天增量备份、每周全量备份),防范RAID阵列故障; 3. 合理分区:将不同类型数据分开存储(如系统盘、数据盘、日志盘分开),避免单块硬盘负载过高。
4.4.3 性能优化
1. 机械硬盘:避免单块硬盘高IO,通过RAID阵列实现并行读写; 2. 固态硬盘:关闭不必要的写入操作(如频繁日志写入),延长闪存寿命; 3. 缓存优化:给高频访问的存储数据(如数据库索引)配置缓存(如Redis),减少存储IO压力。
4.5 章节总结(核心记忆点)
1. RAID阵列是生产环境存储核心,重点掌握RAID 1、5、10,记住各自的冗余特点和适用场景; 2. 运维重点:定期检查RAID状态、硬盘健康度,及时更换故障硬盘,做好数据备份; 3. 存储优化:根据业务需求选型(SSD/ HDD/ RAID级别),平衡性能、成本和安全性; 4. 关键命令:mdadm(RAID管理)、smartctl(硬盘健康检查)、badblocks(坏道扫描)。
第五章:显卡与输出接口(运维基础,了解即可)
显卡及输出接口并非运维核心重点,但日常服务器维护(如机房调试、远程桌面、图形化管理)中会偶尔接触,重点掌握核心作用和接口区分,避免因接口不兼容、认知误区踩坑,无需深入研究硬件原理。
5.1 显卡(VGA/GPU)核心作用
显卡(视频卡)核心作用是将数字信号转换为模拟信号,驱动显示器显示图像,分为集成显卡(主板集成,无独立硬件)和独立显卡(独立硬件,性能更强),服务器场景以集成显卡为主。
运维视角重点(记2点即可): 1. 服务器显卡无需追求高性能,能满足基础图形显示(如BIOS调试、远程桌面)即可; 2. GPU(图形处理器)与显卡相关,部分高性能服务器(如大数据、AI场景)会配置独立GPU,核心用于并行计算,而非图形显示,运维需关注GPU状态(类似CPU、内存的监控逻辑)。
通俗类比:显卡 = 电脑的“画家”,将CPU处理后的数字数据(“画稿”),绘制成显示器能识别的图像(“成品画”),输出到屏幕上。
5.2 视频输出接口对比(主流 vs 淘汰,避坑)
服务器常用视频输出接口分为“主流接口”和“淘汰接口”,重点区分兼容性,避免调试时因接口不匹配无法连接显示器,结合运维场景标注适用场景和注意事项:
| 接口类型 | 状态(主流/淘汰) | 核心特点 | 运维适用场景 | 避坑要点 |
|---|---|---|---|---|
| VGA | 淘汰(逐步淘汰) | 模拟信号,分辨率低(最高1080P),易受干扰,无音频传输 | 老旧服务器、老式显示器,机房遗留设备调试 | 新服务器基本不支持,需备VGA转接头 |
| HDMI | 主流 | 数字信号,分辨率高(支持4K),支持音频传输,接口小巧 | 新服务器、普通显示器、投影仪调试 | 常见接口,兼容性强,优先选用 |
| DP | 主流(高端) | 数字信号,分辨率更高(支持8K),传输速度快,无信号损耗 | 高性能服务器、高清显示器、专业调试场景 | 接口与HDMI不通用,需对应显示器 |
| DVI | 半淘汰 | 数字信号,分辨率中等(支持2K),无音频传输,接口较大 | 中期服务器、部分老式高清显示器 | 逐渐被HDMI/DP替代,调试时需备转接头 |
易错点提醒:服务器调试时,若显示器无信号,优先检查接口类型是否匹配(如用HDMI线连接VGA接口),而非显卡故障;老旧服务器可备“VGA转HDMI”转接头,避免无法连接显示器。
第六章:计算机常用单位(运维易错点,重点记忆)
运维工作中,单位混淆是高频易错点(如把1GB当成1000MB、把Mbps当成MB/s),直接导致容量计算、性能判断失误(如内存配置、带宽评估)。本章重点区分容量、速度单位的二进制与十进制换算,结合运维场景记熟,避免踩坑。
6.1 容量单位(二进制 vs 十进制,避免混淆)
容量单位核心易错点:操作系统用二进制,硬件厂商用十进制,导致实际容量与标注容量有差异(如1TB硬盘,系统显示约931GB),记熟换算关系和运维关注点即可。
6.1.1 核心换算关系(必记)
1. 二进制(操作系统,运维常用):用于内存、系统磁盘容量计算 - 1Byte(字节)= 8bit(比特) - 1KB = 1024Byte - 1MB = 1024KB - 1GB = 1024MB - 1TB = 1024GB
2. 十进制(硬件厂商,硬盘/U盘标注):用于硬件容量标注 - 1KB = 1000Byte - 1MB = 1000KB - 1GB = 1000MB - 1TB = 1000GB
6.1.2 运维关注点(避免踩坑)
1. 硬盘容量差异:如1TB硬盘(厂商十进制),系统识别为 1000×1000×1000×1000 Byte ÷ 1024÷1024÷1024 ≈ 931GB,属于正常现象,并非硬盘质量问题; 2. 内存容量:内存标注与系统识别基本一致(如16GB内存,系统显示约15.5GB,因部分内存被主板占用); 3. 日常运维:计算磁盘剩余空间、内存使用量时,用二进制换算(如1GB内存=1024MB),避免计算失误。
6.2 速度单位(CPU、网络、磁盘,换算重点)
不同硬件的速度单位不同,核心易错点是“大小写区分”“单位换算”,重点掌握CPU、网络、磁盘的速度单位,避免混淆(如把Mbps当成MB/s,导致带宽评估错误)。
| 硬件类型 | 速度单位 | 核心换算 | 运维关注点 |
|---|---|---|---|
| CPU | Hz(赫兹)、GHz | 1GHz = 1000MHz,1MHz = 1000KHz | 关注CPU主频(如2.4GHz),主频越高,单核运算速度越快;运维中无需换算,直接关注数值大小 |
| 网络 | bps(比特/秒)、Mbps、Gbps | 1Gbps = 1000Mbps,1Mbps = 1000Kbps;1MB/s = 8Mbps(核心易错点) | 宽带标注(如100Mbps宽带),实际下载速度最高约12.5MB/s(100÷8);运维中排查网络速度时,需区分Mbps和MB/s |
| 磁盘 | MB/s、GB/s(读写速度) | 1GB/s = 1024MB/s(二进制,系统显示) | 机械硬盘(HDD)读写速度约100-200MB/s,固态硬盘(SSD)约500-2000MB/s;运维中用工具查看时,直接关注MB/s数值 |
记忆口诀:容量二进制,硬件十进制;网络速度看比特,下载速度除以8;CPU主频看GHz,磁盘速度MB/s。
第七章:操作系统与软件运行机制(运维核心,理解底层逻辑)
运维工作的核心的是“解决问题”,而解决问题的关键是理解操作系统与软件的运行机制——为什么进程会崩溃?为什么内存会泄漏?为什么程序无法启动?都能从底层逻辑找到答案。本章重点讲解软件分类、操作系统结构、内核功能,帮你建立底层认知,摆脱“只会敲命令,不懂原理”的困境。
7.1 软件分类(系统软件 vs 应用程序,运维区分重点)
软件按功能分为“系统软件”和“应用程序”,运维的核心职责是维护系统软件,保障应用程序正常运行,两者的区分是运维基础,避免混淆。
| 软件类型 | 核心定义 | 常见示例 | 运维关注点 |
|---|---|---|---|
| 系统软件 | 管理硬件资源、为应用程序提供运行环境,不可缺少 | 操作系统(Linux、Windows)、驱动程序、编译器、Shell | 重点维护,确保稳定运行;故障会导致整个系统崩溃 |
| 应用程序 | 基于系统软件运行,实现特定业务功能 | Nginx、MySQL、Java程序、SSH客户端 | 维护运行状态、排查业务故障;故障仅影响自身,不影响系统 |
通俗类比:系统软件 = 小区的“基础设施”(水电、道路),应用程序 = 小区的“住户”;基础设施正常,住户才能正常生活;运维既要保障基础设施(系统软件)稳定,也要保障住户(应用程序)正常使用。
7.2 操作系统结构(图解,直观理解)
操作系统采用“分层结构”,从底层到上层依次为:硬件层 → 内核层 → 系统调用层 → 应用层,层层依赖,运维重点理解“用户→内核→硬件”的调用流程,无需深入代码层面。
分层解读(通俗易懂): 1. 硬件层:服务器物理硬件(CPU、内存、存储、网卡、显卡),是整个系统的基础; 2. 内核层:操作系统的核心,直接操作硬件,管理资源(进程、内存、文件),屏蔽硬件差异; 3. 系统调用层:为应用程序提供调用内核的接口(如文件读写、网络通信),应用程序无需直接操作硬件; 4. 应用层:应用程序(如Nginx、MySQL),通过系统调用层调用内核资源,实现业务功能。
核心逻辑(必记):应用程序不能直接操作硬件,必须通过内核调用硬件资源;任何应用程序的运行,都需要内核分配CPU、内存等资源。
7.3 内核核心功能(运维必知,进程/内存/文件/驱动/网络)
内核是操作系统的“核心大脑”,所有硬件资源管理、进程调度都由内核负责,运维重点掌握5个核心功能,对应日常故障排查场景:
7.3.1 进程管理
核心作用:调度CPU资源,分配进程优先级,管理进程的创建、运行、终止,避免单进程占用过多CPU资源。
运维关联:进程卡顿、CPU使用率过高,本质是内核进程调度异常(如高优先级进程抢占资源),需通过top、ps等命令排查进程状态。
7.3.2 内存管理
核心作用:管理物理内存和虚拟内存,分配内存空间给进程,回收空闲内存,处理内存交换(Swap)。
运维关联:OOM杀进程、内存泄漏、Swap使用率过高,均与内核内存管理相关,需通过free、vmstat等命令排查。
7.3.3 文件管理
核心作用:管理磁盘文件(创建、删除、读写),维护文件系统(如ext4、xfs),映射文件与硬件存储的关系。
运维关联:文件无法读写、磁盘挂载失败、文件系统损坏,均与内核文件管理相关,需通过mount、df等命令排查。
7.3.4 驱动管理
核心作用:提供硬件驱动程序,让内核识别并操作硬件(如网卡、硬盘、显卡),屏蔽硬件差异。
运维关联:网卡无法识别、硬盘读写异常,可能是驱动程序缺失或不兼容,需更新驱动。
7.3.5 网络管理
核心作用:管理网络接口、网络连接、网络协议,实现数据传输与通信。
运维关联:网络断网、延迟高、丢包,与内核网络管理相关,需通过ip、netstat等命令排查。
7.4 运行层次(理解用户→内核→硬件的调用流程)
应用程序的运行,本质是“用户发起请求 → 应用程序调用系统接口 → 内核处理请求 → 操作硬件 → 返回结果”的流程,理解该流程,能快速定位故障点。
以“用户通过SSH连接服务器”为例,流程拆解(通俗易懂): 1. 用户操作:打开SSH客户端,输入服务器IP和端口,发起连接请求; 2. 应用层:SSH客户端(应用程序)接收请求,通过系统调用接口,向内核发起“网络连接”请求; 3. 内核层:内核接收请求,调用网络管理模块,配置网卡、发起TCP连接,分配端口资源; 4. 硬件层:网卡接收网络数据,传输到内核,内核再传递给SSH服务程序; 5. 结果返回:SSH服务验证通过后,内核将“连接成功”结果返回给SSH客户端,用户成功登录。
运维排查逻辑:若SSH连接失败,可按“用户→应用(SSH客户端/服务)→ 内核(网络配置)→ 硬件(网卡/网线)”的顺序排查,定位故障层级。
7.5 内存管理要点(虚拟内存、分页、swap、OOM)
结合第三章内存内容,补充内核层面的内存管理要点,深化理解,贴合运维故障排查:
-
虚拟内存:内核将物理内存和部分硬盘空间(Swap)整合,为应用程序提供“连续的虚拟内存地址”,让应用程序无需关心物理内存的实际分配,提升内存利用率;
-
分页机制:内核将虚拟内存和物理内存分成固定大小的“页”(如4KB),通过页表映射虚拟地址和物理地址,实现内存的高效分配与回收;运维中无需关注分页细节,知道其作用即可;
-
Swap(内存交换):当物理内存不足时,内核将不常用的内存页(数据)换入Swap(硬盘),释放物理内存给活跃进程;Swap使用率过高会导致系统卡顿,需合理配置;
-
OOM(内存耗尽):当物理内存+Swap全部耗尽,内核为了保障系统运行,会触发OOM killer,杀死占用内存最高的进程(优先杀死非核心进程);运维需重点排查OOM原因,避免业务进程被杀死。
第八章:运维视角的性能分析(实操重点,必练)
性能分析是运维的核心技能之一——系统卡顿、业务响应慢、故障频发,都需要通过性能分析定位根源。本章结合前文内容,汇总CPU、内存、磁盘IO、网络的性能分析命令、关键指标、故障判断,全部为实操重点,可直接复制使用,兼顾易记和实用。
8.1 CPU 性能分析(常用命令 + 关键指标 + 故障判断)
CPU性能分析的核心是“查看使用率、定位高占用进程、判断瓶颈”,重点掌握3个常用命令和2个关键指标。
8.1.1 常用命令(必记,直接复制)
# 1. 实时监控CPU状态(最常用,重点关注%us、%sy、%id)
top # 按P键,按CPU使用率排序;按q键退出
# 核心参数解读:
# %us:用户进程占用CPU百分比(重点,如Java、MySQL进程)
# %sy:内核进程占用CPU百分比(正常≤20%,过高说明内核有异常)
# %id:空闲CPU百分比(正常≥30%,过低说明CPU不足)
# %wa:IO等待占用CPU百分比(过高说明磁盘IO有瓶颈)
# 2. 查看CPU整体使用情况(统计维度,非实时)
mpstat 1 5 # 每1秒统计1次,共5次,查看所有CPU核心的使用率
# 3. 定位高CPU占用进程(精准排查)
ps -aux --sort=-%cpu | head -10 # 查看CPU占用前10的进程
pidstat -u 1 # 实时查看每个进程的CPU占用情况
8.1.2 关键指标与故障判断
| 关键指标 | 正常范围 | 异常表现 | 故障判断与解决方案 |
|---|---|---|---|
| %us(用户进程CPU) | ≤70% | 持续≥80% | 业务进程占用过高,排查高占用进程(ps命令),优化程序(如Java程序调优) |
| %sy(内核进程CPU) | ≤20% | 持续≥30% | 内核异常(如驱动问题、内核参数错误),检查内核日志(dmesg),更新内核/驱动 |
| %wa(IO等待CPU) | ≤10% | 持续≥20% | 磁盘IO有瓶颈,排查磁盘读写(参考8.3),优化磁盘或业务程序 |
8.2 内存性能分析(常用命令 + 关键指标 + 故障判断)
内存性能分析的核心是“查看实际可用内存、排查异常占用、判断内存泄漏”,结合第三章内存内容,汇总实操重点。
8.2.1 常用命令(必记,直接复制)
# 1. 查看内存整体使用情况(最常用,重点关注available)
free -h
# 核心参数解读:
# total:物理内存总量
# used:已使用内存(含进程占用+缓存+缓冲)
# free:完全空闲内存
# buff/cache:缓存+缓冲内存(可释放)
# available:实际可用内存(关键,= free + buff/cache)
# 2. 实时监控内存使用情况
vmstat 1 5 # 每1秒统计1次,共5次,查看内存交换(si/so)
# 重点关注:
# si:Swap换入(内存不足时,从Swap读数据到内存,正常=0)
# so:Swap换出(内存不足时,从内存写数据到Swap,正常=0)
# 3. 定位高内存占用进程
ps -aux --sort=-%mem | head -10 # 查看内存占用前10的进程
top # 按M键,按内存占用排序
8.2.2 关键指标与故障判断
| 关键指标 | 正常范围 | 异常表现 | 故障判断与解决方案 |
|---|---|---|---|
| available(可用内存) | ≥总内存的20% | 持续<10% | 内存不足,释放缓存(echo 3 > /proc/sys/vm/drop_caches),排查高内存进程 |
| si/so(Swap交换) | 持续=0 | 持续>0 | 物理内存不足,调整swappiness参数,扩容内存或优化进程 |
| 内存使用率 | ≤80% | 持续≥90%,且available低 | 内存泄漏或内存不足,排查长期运行、内存持续升高的进程 |
8.3 磁盘 I/O 性能分析(常用命令 + 关键指标 + 故障判断)
磁盘IO性能分析的核心是“查看读写速度、IO等待、磁盘负载”,解决磁盘卡顿、读写缓慢等问题,重点关注机械硬盘(HDD)和固态硬盘(SSD)的差异。
8.3.1 常用命令(必记,直接复制)
# 1. 查看磁盘IO整体状态(最常用,重点关注%util、await)
iostat -x 1 5 # 每1秒统计1次,共5次,查看所有磁盘的IO情况
# 核心参数解读:
# %util:磁盘IO使用率(单个磁盘正常≤80%,接近100%说明IO饱和)
# await:IO等待时间(单位ms,正常≤20ms,过高说明IO有瓶颈)
# rMB/s:读速度,wMB/s:写速度(参考HDD/SSD正常速度)
# 2. 实时监控磁盘IO(定位高IO进程)
iotop # 按O键,按IO使用率排序,查看哪个进程占用磁盘IO高
# 3. 查看磁盘挂载和空间使用
df -h # 查看磁盘剩余空间
mount # 查看磁盘挂载情况(排查挂载异常导致的IO问题)
8.3.2 关键指标与故障判断
| 关键指标 | 正常范围(HDD/SSD) | 异常表现 | 故障判断与解决方案 |
|---|---|---|---|
| %util(磁盘IO使用率) | HDD≤80%,SSD≤90% | 持续≥90% | 磁盘IO饱和,优化业务程序(减少频繁读写),更换SSD或增加磁盘 |
| await(IO等待时间) | ≤20ms | 持续≥50ms | IO等待过高,排查磁盘坏道、RAID阵列故障,优化磁盘读写 |
| 读写速度 | HDD:读100-200MB/s,写80-150MB/s;SSD:读500-2000MB/s | 远低于正常范围 | 磁盘老化、坏道或RAID配置异常,检查磁盘健康度(smartctl) |
8.4 网络性能分析(常用命令 + 关键指标 + 故障判断)
网络性能分析的核心是“查看连通性、监控带宽、排查延迟和丢包”,结合第五章网络内容,汇总实操重点,解决网络故障。
8.4.1 常用命令(必记,直接复制)
# 1. 测试连通性和延迟、丢包
ping -c 100 目标IP # 测试100次,查看延迟(avg)和丢包率(packet loss)
mtr 目标IP # 更详细的网络路由测试,查看每一跳的延迟和丢包
# 2. 监控网络带宽和流量
iftop -i eth0 # 实时监控eth0网卡的进出流量,查看带宽占用
sar -n DEV 1 5 # 每1秒统计1次,共5次,查看网卡流量和错误率
# 3. 查看网络连接和端口状态
ss -an | grep ESTABLISHED # 查看已建立的连接,排查异常连接
ss -an | grep LISTEN # 查看监听的端口,排查端口占用
8.4.2 关键指标与故障判断
| 关键指标 | 正常范围 | 异常表现 | 故障判断与解决方案 |
|---|---|---|---|
| 延迟(ping avg) | 内网≤10ms,外网≤100ms | 持续>100ms | 网络拥堵、网线质量差或路由异常,用mtr排查路由节点,更换网线 |
| 丢包率 | ≤1% | 持续>1% | 网络链路不稳定、交换机故障,排查网线、交换机,联系网络管理员 |
| 带宽占用 | ≤带宽总量的80% | 持续≥90% | 带宽饱和,排查大流量进程(iftop),限制非核心业务带宽 |
第九章:实践案例与思考(运维实战,学以致用)
结合前文CPU、内存、磁盘IO、网络的知识点,整理4个运维高频故障案例,按“故障现象→排查步骤→解决方案→总结思考”的逻辑,还原真实运维场景,帮你将理论知识转化为实操能力,遇到同类故障可直接参考。
9.1 案例 1:CPU 使用率 100% 但负载不高(排查 + 解决)
9.1.1 故障现象
服务器top命令查看,CPU使用率持续100%(%us=95%),但系统负载(load average)仅0.5(远低于CPU核心数4),系统响应缓慢,业务程序卡顿。
9.1.2 排查步骤
-
用top命令查看CPU占用情况,按P键排序,发现一个Java进程(pid=1234)占用CPU 90%以上;
-
用ps -aux | grep 1234,查看该进程的详细信息,确认是业务程序的Java进程;
-
用pidstat -u 1 5,监控该进程的CPU占用,发现其%us持续90%以上,%sy接近0,说明是用户进程自身问题,而非内核或IO导致;
-
查看Java进程日志(tail -f /var/log/java/app.log),发现程序存在死循环(无限循环执行某段代码),导致CPU持续高占用。
9.1.3 解决方案
-
紧急恢复:执行kill -9 1234,终止故障Java进程,重启业务服务(systemctl restart java-app),系统CPU使用率恢复正常,业务恢复;
-
根因解决:将日志反馈给开发人员,修复程序死循环bug,重新部署业务服务;
-
长期预防:设置进程CPU使用率阈值(如用cgroups限制Java进程CPU占用≤70%),避免单个进程占用全部CPU。
9.1.4 总结思考
CPU使用率高≠系统负载高:负载高是“等待CPU的进程多”,而CPU使用率高可能是“单个进程占用大量CPU”;排查时优先定位高CPU进程,再分析进程本身的问题(如死循环、代码效率低),而非盲目扩容CPU。
9.2 案例 2:内存充足但频繁 swap(排查 + 解决)
9.2.1 故障现象
服务器内存为32GB,free -h查看available为15GB(内存充足),但vmstat查看si、so持续>0(频繁Swap交换),系统卡顿,业务响应缓慢。
9.2.2 排查步骤
-
查看swappiness参数:sysctl -a | grep swappiness,发现值为60(默认值,系统倾向于使用Swap);
-
用vmstat 1 5查看,发现si(Swap换入)、so(Swap换出)持续>0,而available内存充足,说明是swappiness参数设置不合理;
-
查看内存使用情况:free -h,发现buff/cache占用8GB,available=15GB,内存确实充足,无内存不足问题;
-
排查进程:ps -aux --sort=-%mem,无高内存占用进程,排除进程内存泄漏问题。
9.2.3 解决方案
-
紧急恢复:临时调整swappiness参数(sysctl -w vm.swappiness=10),减少系统对Swap的依赖,si、so立即变为0,系统卡顿缓解;
-
永久生效:编辑/etc/sysctl.conf,添加vm.swappiness=10,执行sysctl -p生效,避免重启后恢复默认值;
-
优化补充:释放缓存(echo 3 > /proc/sys/vm/drop_caches),进一步提升可用内存,减少Swap触发的可能性。
9.2.4 总结思考
内存充足仍频繁Swap,核心是swappiness参数设置过高;swappiness值越小,系统越倾向于使用物理内存,服务器场景建议设置为10-20,避免不必要的Swap交换导致系统卡顿。
9.3 案例 3:磁盘 await 很高但 % util 不高(排查 + 解决)
9.3.1 故障现象
服务器iostat -x查看,磁盘sda的await=80ms(远高于正常范围),但%util=30%(低于80%,未饱和),磁盘读写缓慢,业务程序频繁出现“IO超时”。
9.3.2 排查步骤
-
用iotop查看磁盘IO进程,发现多个进程同时进行小文件读写(如日志写入、数据库频繁查询);
-
查看磁盘类型:fdisk -l,发现该磁盘为机械硬盘(HDD),小文件频繁读写会导致IO等待时间过长;
-
查看磁盘队列长度:iostat -x 1 5,发现avgqu-sz=10(正常≤2),说明磁盘IO队列过长,请求排队等待;
-
排查RAID状态:mdadm -D /dev/md0,发现RAID 5阵列正常,无硬盘故障。
9.3.3 解决方案
-
紧急恢复:暂停非核心业务的小文件读写(如临时关闭日志写入),减少磁盘IO请求,await降至20ms以下,业务恢复正常;
-
短期优化:将高频读写的小文件(如日志、数据库临时文件)迁移到SSD磁盘,提升读写速度,减少IO等待;
-
长期优化:优化业务程序,合并小文件读写(如日志按小时合并写入),减少磁盘IO请求次数;将机械硬盘更换为SSD,从根本上提升IO性能。
9.3.4 总结思考
await高≠%util高:%util是磁盘IO使用率,await是IO等待时间;小文件频繁读写会导致IO请求排队,即使磁盘未饱和,也会出现高await;解决方案重点是“减少IO请求次数”或“提升IO速度”。
9.4 案例 4:网络延迟高、丢包(排查 + 解决)
9.4.1 故障现象
服务器ping外网(www.baidu.com),延迟avg=200ms,丢包率=5%,Web服务对外访问卡顿,远程SSH连接频繁断开。
9.4.2 排查步骤
-
测试内网连通性:ping网关(192.168.1.1),延迟avg=5ms,丢包率=0%,说明内网正常,问题出在外网链路或网卡配置;
-
查看网卡状态:ethtool eth0,发现网卡速率协商为100M(服务器网卡支持1000M),链路正常;
-
用mtr www.baidu.com测试,发现某一跳路由延迟突然升高至180ms,且存在丢包,说明是外网链路问题;
-
查看DNS解析:nslookup www.baidu.com,解析正常,排除DNS问题;
-
检查防火墙:firewall-cmd --list-ports,必要端口均开放,排除防火墙拦截。
9.4.3 解决方案
-
紧急恢复:协商网卡速率为1000M(ethtool -s eth0 speed 1000 duplex full),延迟降至120ms,丢包率降至1%;
-
根因解决:联系网络服务商,反馈外网链路问题,服务商调整路由,延迟降至80ms,丢包率=0%;
-
长期预防:配置双网卡、多线路冗余,避免单条链路故障导致网络异常;定期用mtr测试外网链路,及时发现问题。
9.4.4 总结思考
网络延迟高、丢包,优先排查“内网→外网”的链路:先测试内网连通性,排除本地网卡、网线问题;再测试外网路由,排查链路故障;最后检查DNS、防火墙,确保无其他干扰。
附录:快速记忆表(运维应急,快速调用)
一、核心知识点速记(口诀 + 重点)
1. 硬件核心口诀
CPU看主频,内存看可用;磁盘看IO,网络看延迟;RAID看冗余,显卡看接口。
2. 单位换算口诀
容量二进制,硬件十进制;网络Mbps,下载除以8;CPU看GHz,磁盘MB/s。
3. 故障排查口诀
CPU高查进程,内存高查泄漏;IO高查队列,网络卡查链路;Swap高调参数,OOM查进程。
4. 核心铁律(必记)
-
所有数据必须经过内存,CPU不能直接读取硬盘;
-
应用程序不能直接操作硬件,必须通过内核调用;
-
RAID仅解决硬盘损坏问题,无法防范误删除、病毒攻击;
-
内存充足仍Swap,大概率是swappiness参数过高。
二、常用命令速查(按场景分类,直接复制)
1. CPU性能排查
top # 实时监控CPU,按P排序
ps -aux --sort=-%cpu | head -10 # 高CPU进程
mpstat 1 5 # CPU整体统计
2. 内存性能排查
free -h # 内存整体使用
vmstat 1 5 # 内存交换监控
ps -aux --sort=-%mem | head -10 # 高内存进程
echo 3 > /proc/sys/vm/drop_caches # 释放缓存
3. 磁盘IO性能排查
iostat -x 1 5 # 磁盘IO整体统计
iotop # 高IO进程监控
df -h # 磁盘空间
smartctl -a /dev/sda # 磁盘健康度
4. 网络性能排查
ping -c 100 目标IP # 延迟、丢包测试
mtr 目标IP # 路由测试
iftop -i eth0 # 带宽监控
ss -an | grep 端口 # 端口、连接监控
ethtool eth0 # 网卡状态
5. RAID运维
mdadm -D /dev/md0 # 查看RAID状态
mdadm /dev/md0 --fail /dev/sdb # 标记故障硬盘
mdadm /dev/md0 --add /dev/sdb # 添加新硬盘,重建RAID
6. 系统与内核运维
systemctl status 服务名 # 服务状态
uname -r # 内核版本
dmesg | grep -i error # 内核错误日志
sysctl -p # 生效内核参数

浙公网安备 33010602011771号