Linux 内核崩溃与 kdump:给服务器装上飞行记录仪

概述 凌晨三点,你被告警吵醒,登录服务器发现屏幕上只有一行 Kernel panic - not syncing: Fatal exception,然后系统就重启了。等你好不容易连上去,崩溃现场什么都没留下——没有日志,没有 core dump,没有调用栈。你只能对着一句 systemd-logind: System is going down 发呆。 这种场景,每个干过几年运维的人都遇到过。内核崩溃本身已经够头疼了,但更头疼的是崩溃后什么都抓不到,问题根本没法定位。 kdump 就是解决这个问题的。它相当于给 Linux 服务器装了一台飞行记录仪——飞机坠毁时,黑匣子能告诉你最后几秒发生了什么;内核崩溃时,kdump 能把崩溃瞬间的完整内存状态保存下来,让你事后用 crash 工具逐帧分析。 这篇文章不讲虚的,从 kdump 的工作原理到生产环境的完整配置流程,再到 crash 工具的实际分析操作,全部覆盖。读完之后,你应该能在自己的服务器上搭一套可靠的崩溃捕获系统。 kdump 是怎么工作的 双内核机制 要理解 kdump,先搞懂一个关键概念:崩溃时主内核已经不可信了。你不能指望一个已经 panic 的内核去把自己的内存好好保存下来——它连正常执行代码都做不到。 kdump 的思路很巧妙:系统启动时,提前预留一块物理内存,在里面加载一个精简的"捕获内核"(capture kernel,也叫第二内核)。主内核正常运行时,这块内存被隔离,谁都不许动。一旦主内核崩溃,kexec 机制会直接把 CPU 控制权交给捕获内核——不走 BIOS,不重启硬件,直接在预留内存里启动。捕获内核接管后,主内核的内存内容还完好无损地躺在那里,捕获内核把它打包成 vmcore 文件,写到磁盘上。 整个过程像这样: ┌──────────────────────────────────────────────┐ │ 物理内存布局 │ │ │ │ ┌────────────────┐ ┌───────────────────┐ │ │ │ 主内核区域 │ │ 预留内存区域 │ │ │ │ (正常运行) │ │ (crashkernel) │ │ │ │ │ │ │ │ │ │ 用户进程 │ │ 捕获内核 + │ │ │ │ 内核模块 │ │ initramfs │ │ │ │ 页缓存....

July 17, 2026 · 11 分钟 · 2144 字 · 徐保金

系统安全审计:auditd 规则配置与日志分析实战

概述 凌晨三点,你被告警吵醒。登录服务器一看,某个关键配置文件被改了,但 last 命令显示那个时间段没有人登录,bash_history 也没记录。你知道出事了,但不知道是谁干的、怎么干的。 这时候你需要的是 auditd——Linux 内核自带的审计系统。它就像飞机的黑匣子,记录系统上发生的每一个关键动作:谁执行了什么命令、访问了哪些文件、改了什么配置、什么时候提的权。而且这些记录在内核层面生成,不依赖 shell history 或应用日志——攻击者就算删了 ~/.bash_history,也删不掉 auditd 的日志。 本文从安装部署讲到规则编写、日志分析和生产调优。不是手册翻译,是踩过坑后的实战经验。 auditd 是什么,和 syslog 有什么区别 先说清楚一个常见的混淆。很多人觉得"我有 syslog/journald 了,还要 auditd 干嘛?" 两者记录的东西完全不同: 对比项 syslog/journald auditd 记录层级 应用层 内核层 记录内容 服务启动/停止、应用日志、登录记录 系统调用、文件访问、权限变更 粒度 粗(按事件) 细(按系统调用) 防篡改 无(root 可随意修改) 有(日志写入前加密校验) 性能影响 极低 有,取决于规则数量和复杂度 典型用途 日常运维日志 安全审计、合规检查、应急响应 打个比方:syslog 像小区门口的保安登记簿,谁进谁出记一笔。auditd 像每户人家的门禁记录加室内监控——什么时候开了哪个门、谁开的、开了多久,精确到秒。 auditd 最初源自 Solaris 的审计子系统,Linux 内核 2.6(2004 年)开始引入,由 Red Hat 和 IBM 主导开发。现在已经是 CIS Benchmark、PCI-DSS、HIPAA 等安全合规标准的必备组件。 auditd 已成为 Linux 安全标准(如 CIS Benchmark、PCI-DSS、HIPAA)的重要组成部分。参考来源:Demystifying Auditd: A Complete Guide for Linux Security Monitoring...

July 15, 2026 · 12 分钟 · 2500 字 · 徐保金

Linux 网络抓包与协议分析:从 tcpdump 到 Wireshark 的实战排障指南

概述 凌晨两点,你被电话吵醒。订单系统大面积超时,但 CPU 正常、内存正常、磁盘 IO 正常。重启服务没用,回滚也没用。你盯着监控大盘,一切指标都是绿的,唯独用户在骂。 十有八九,是网络层面的问题。这时候你需要的是一双能看见数据包的眼睛。 tcpdump 就是这双眼睛。它不是什么新工具——1990 年代就有了——但到今天仍然是 Linux 上最硬核的网络诊断手段。说直白点:如果你只会看监控图表、不会抓包,那遇到网络层问题时你就是个瞎子。 这篇文章不讲花哨的概念,就讲实战:tcpdump 怎么抓、BPF 过滤器怎么写、pcap 文件怎么用 Wireshark 分析、TCP 三次握手和 TLS 握手在抓包里长什么样、以及那些我踩过坑才学会的技巧。 tcpdump 基础:先搞懂你在抓什么 什么是抓包 网卡收到的每一个数据帧,正常情况下只有操作系统内核会处理,用户态程序看不到原始内容。抓包就是把网卡的混杂模式(promiscuous mode)打开,让内核把所有流经网卡的数据包副本都交给抓包工具。 打个比方:正常情况下网卡像个只读收件箱的快递员,只把发给你的包裹送上门。开了混杂模式后,它变成监控摄像头,把整条街上经过的所有包裹都拍下来——不管是不是给你的。 tcpdump vs Wireshark:分工不同 对比维度 tcpdump Wireshark 运行环境 服务器命令行,SSH 即可 需要图形界面 资源占用 极低(几 MB 内存) 较高(GUI 程序) 核心能力 捕获+保存 pcap 深度协议解析+交互式分析 过滤语法 BPF(Berkeley Packet Filter) 显示过滤器(Display Filter) 适用场景 生产服务器实时抓包、长期后台捕获 本地分析 pcap 文件、协议细节排查 自动化 可写成脚本、对接告警 不适合自动化 实际工作中的标准流程:服务器上用 tcpdump 抓包保存成 pcap 文件,scp 下载到本地,用 Wireshark 打开分析。这个组合我在过去七年里用了不下五百次。 安装与权限 大多数 Linux 发行版预装了 tcpdump。检查一下:...

July 14, 2026 · 10 分钟 · 2015 字 · 徐保金

Linux CPU 隔离与 NUMA 调优:给关键业务独占算力的实战指南

概述 线上跑着一个高频交易系统,P99 延迟平时 2ms,但偶尔飙到 20ms。CPU 使用率不高,内存充足,网络正常。查了一圈,发现是 CPU 调度器把关键线程踢到了另一个核上,L3 缓存全部 miss,延迟直接翻了 10 倍。 这种问题不是靠加资源能解决的。问题出在"共享"——所有进程共享 CPU 核心,调度器自由分配,谁也不知道哪个线程是延迟敏感的。 解决办法就是 CPU 隔离:把关键业务绑到专属核心上,不让别的进程碰。同时做 NUMA 调优,让 CPU 和内存在物理上"就近",避免跨节点访问带来的延迟翻倍。 这篇笔记覆盖从基础概念到生产实操的完整链路:isolcpus 内核参数、cpuset cgroup、taskset 绑核、NUMA 亲和性、中断绑核、以及组合使用的最佳实践。所有命令都在 Ubuntu 22.04(内核 5.15)和 CentOS 8 上实测过。 基础概念:为什么要隔离 CPU CPU 调度器是怎么工作的 Linux 默认使用 CFS(Completely Fair Scheduler,完全公平调度器)分配 CPU 时间。CFS 的设计目标是"公平"——每个进程根据权重获得 CPU 时间片,调度器在所有可用核心之间自由迁移进程。 听起来没问题,但对延迟敏感的场景是个灾难: 上下文切换开销:线程从 CPU A 迁移到 CPU B,L1/L2 缓存全部失效,需要重新从内存加载数据。一次迁移的代价是微秒级的延迟抖动。 缓存污染:其他进程跑在你的目标核上,把你之前缓存的数据挤出去,下次你的线程回来时全是 cache miss。 中断干扰:网卡中断、定时器中断随时打断你的线程。对于要求微秒级响应的系统,一次中断就是一次延迟尖峰。 NUMA 架构是什么 NUMA(Non-Uniform Memory Access,非统一内存访问)是多路服务器的标配架构。简单说就是:每个 CPU 插槽有自己的本地内存,访问自己的内存很快,访问别的 CPU 的内存要跨 QPI/UPI 总线,延迟翻倍。...

July 13, 2026 · 10 分钟 · 2091 字 · 徐保金

PostgreSQL 高可用架构:Patroni 与 etcd 集群部署

概述 PostgreSQL 高可用架构:Patroni 与 etcd 集群部署是SRE运维工作中的重要技能。在实际生产环境中,掌握这些技术能够有效提升系统的稳定性和运维效率。 为什么需要PostgreSQL 高可用架构 随着系统规模的扩大和复杂度的增加,传统的运维手段已经难以满足现代分布式系统的需求。PostgreSQL 高可用架构能够帮助运维团队: 快速定位问题:通过系统化的工具和方法,缩短故障排查时间 提升系统可见性:建立全面的监控和可观测性体系 预防故障发生:通过主动发现和修复潜在风险,降低故障率 优化资源利用:合理分配和调度资源,提升系统性能 核心概念与原理 基础概念 PostgreSQL 高可用架构的核心在于建立标准化的流程和自动化的工具链。主要包括以下几个方面: 数据收集与处理:从各种数据源收集指标、日志和追踪信息 分析与可视化:通过仪表盘和告警系统展示系统状态 自动化响应:基于预设规则自动执行修复操作 持续优化:根据历史数据和反馈不断改进流程 关键技术点 1. 配置管理 合理的配置管理是PostgreSQL 高可用架构的基础。建议使用版本控制工具管理配置文件,确保变更可追溯: # 示例:配置版本控制 # 所有配置文件存放在 Git 仓库中 git init /etc/monitoring cd /etc/monitoring git add . git commit -m "Initial monitoring configuration" 2. 自动化工具选择 根据团队技术栈选择合适的工具: 场景 推荐工具 说明 配置管理 Ansible 无代理,适合中小规模 容器编排 Kubernetes 云原生标准 监控告警 Prometheus + Grafana 开源,社区活跃 日志收集 Loki / ELK 轻量或功能丰富 CI/CD GitLab CI / GitHub Actions 与代码托管集成 实践案例 场景:生产环境故障排查 假设线上服务出现响应延迟,排查步骤如下:...

October 16, 2025 · 1 分钟 · 197 字 · 徐保金

MySQL 性能优化:慢查询分析与索引调优实践

概述 MySQL 性能优化:慢查询分析与索引调优实践是SRE运维工作中的重要技能。在实际生产环境中,掌握这些技术能够有效提升系统的稳定性和运维效率。 为什么需要MySQL 性能优化 随着系统规模的扩大和复杂度的增加,传统的运维手段已经难以满足现代分布式系统的需求。MySQL 性能优化能够帮助运维团队: 快速定位问题:通过系统化的工具和方法,缩短故障排查时间 提升系统可见性:建立全面的监控和可观测性体系 预防故障发生:通过主动发现和修复潜在风险,降低故障率 优化资源利用:合理分配和调度资源,提升系统性能 核心概念与原理 基础概念 MySQL 性能优化的核心在于建立标准化的流程和自动化的工具链。主要包括以下几个方面: 数据收集与处理:从各种数据源收集指标、日志和追踪信息 分析与可视化:通过仪表盘和告警系统展示系统状态 自动化响应:基于预设规则自动执行修复操作 持续优化:根据历史数据和反馈不断改进流程 关键技术点 1. 配置管理 合理的配置管理是MySQL 性能优化的基础。建议使用版本控制工具管理配置文件,确保变更可追溯: # 示例:配置版本控制 # 所有配置文件存放在 Git 仓库中 git init /etc/monitoring cd /etc/monitoring git add . git commit -m "Initial monitoring configuration" 2. 自动化工具选择 根据团队技术栈选择合适的工具: 场景 推荐工具 说明 配置管理 Ansible 无代理,适合中小规模 容器编排 Kubernetes 云原生标准 监控告警 Prometheus + Grafana 开源,社区活跃 日志收集 Loki / ELK 轻量或功能丰富 CI/CD GitLab CI / GitHub Actions 与代码托管集成 实践案例 场景:生产环境故障排查 假设线上服务出现响应延迟,排查步骤如下:...

October 13, 2025 · 1 分钟 · 194 字 · 徐保金

Redis 运维实践:持久化、高可用与性能监控

概述 Redis 运维实践:持久化、高可用与性能监控是SRE运维工作中的重要技能。在实际生产环境中,掌握这些技术能够有效提升系统的稳定性和运维效率。 为什么需要Redis 运维实践 随着系统规模的扩大和复杂度的增加,传统的运维手段已经难以满足现代分布式系统的需求。Redis 运维实践能够帮助运维团队: 快速定位问题:通过系统化的工具和方法,缩短故障排查时间 提升系统可见性:建立全面的监控和可观测性体系 预防故障发生:通过主动发现和修复潜在风险,降低故障率 优化资源利用:合理分配和调度资源,提升系统性能 核心概念与原理 基础概念 Redis 运维实践的核心在于建立标准化的流程和自动化的工具链。主要包括以下几个方面: 数据收集与处理:从各种数据源收集指标、日志和追踪信息 分析与可视化:通过仪表盘和告警系统展示系统状态 自动化响应:基于预设规则自动执行修复操作 持续优化:根据历史数据和反馈不断改进流程 关键技术点 1. 配置管理 合理的配置管理是Redis 运维实践的基础。建议使用版本控制工具管理配置文件,确保变更可追溯: # 示例:配置版本控制 # 所有配置文件存放在 Git 仓库中 git init /etc/monitoring cd /etc/monitoring git add . git commit -m "Initial monitoring configuration" 2. 自动化工具选择 根据团队技术栈选择合适的工具: 场景 推荐工具 说明 配置管理 Ansible 无代理,适合中小规模 容器编排 Kubernetes 云原生标准 监控告警 Prometheus + Grafana 开源,社区活跃 日志收集 Loki / ELK 轻量或功能丰富 CI/CD GitLab CI / GitHub Actions 与代码托管集成 实践案例 场景:生产环境故障排查 假设线上服务出现响应延迟,排查步骤如下:...

September 15, 2025 · 1 分钟 · 201 字 · 徐保金

TLS/SSL 证书管理:从申请到自动续期的运维实践

概述 TLS/SSL 证书管理:从申请到自动续期的运维实践是SRE运维工作中的重要技能。在实际生产环境中,掌握这些技术能够有效提升系统的稳定性和运维效率。 为什么需要TLS/SSL 证书管理 随着系统规模的扩大和复杂度的增加,传统的运维手段已经难以满足现代分布式系统的需求。TLS/SSL 证书管理能够帮助运维团队: 快速定位问题:通过系统化的工具和方法,缩短故障排查时间 提升系统可见性:建立全面的监控和可观测性体系 预防故障发生:通过主动发现和修复潜在风险,降低故障率 优化资源利用:合理分配和调度资源,提升系统性能 核心概念与原理 基础概念 TLS/SSL 证书管理的核心在于建立标准化的流程和自动化的工具链。主要包括以下几个方面: 数据收集与处理:从各种数据源收集指标、日志和追踪信息 分析与可视化:通过仪表盘和告警系统展示系统状态 自动化响应:基于预设规则自动执行修复操作 持续优化:根据历史数据和反馈不断改进流程 关键技术点 1. 配置管理 合理的配置管理是TLS/SSL 证书管理的基础。建议使用版本控制工具管理配置文件,确保变更可追溯: # 示例:配置版本控制 # 所有配置文件存放在 Git 仓库中 git init /etc/monitoring cd /etc/monitoring git add . git commit -m "Initial monitoring configuration" 2. 自动化工具选择 根据团队技术栈选择合适的工具: 场景 推荐工具 说明 配置管理 Ansible 无代理,适合中小规模 容器编排 Kubernetes 云原生标准 监控告警 Prometheus + Grafana 开源,社区活跃 日志收集 Loki / ELK 轻量或功能丰富 CI/CD GitLab CI / GitHub Actions 与代码托管集成 实践案例 场景:生产环境故障排查 假设线上服务出现响应延迟,排查步骤如下:...

September 14, 2025 · 1 分钟 · 193 字 · 徐保金

Nginx 性能调优:从配置到内核参数的完整实践

概述 Nginx 性能调优:从配置到内核参数的完整实践是SRE运维工作中的重要技能。在实际生产环境中,掌握这些技术能够有效提升系统的稳定性和运维效率。 为什么需要Nginx 性能调优 随着系统规模的扩大和复杂度的增加,传统的运维手段已经难以满足现代分布式系统的需求。Nginx 性能调优能够帮助运维团队: 快速定位问题:通过系统化的工具和方法,缩短故障排查时间 提升系统可见性:建立全面的监控和可观测性体系 预防故障发生:通过主动发现和修复潜在风险,降低故障率 优化资源利用:合理分配和调度资源,提升系统性能 核心概念与原理 基础概念 Nginx 性能调优的核心在于建立标准化的流程和自动化的工具链。主要包括以下几个方面: 数据收集与处理:从各种数据源收集指标、日志和追踪信息 分析与可视化:通过仪表盘和告警系统展示系统状态 自动化响应:基于预设规则自动执行修复操作 持续优化:根据历史数据和反馈不断改进流程 关键技术点 1. 配置管理 合理的配置管理是Nginx 性能调优的基础。建议使用版本控制工具管理配置文件,确保变更可追溯: # 示例:配置版本控制 # 所有配置文件存放在 Git 仓库中 git init /etc/monitoring cd /etc/monitoring git add . git commit -m "Initial monitoring configuration" 2. 自动化工具选择 根据团队技术栈选择合适的工具: 场景 推荐工具 说明 配置管理 Ansible 无代理,适合中小规模 容器编排 Kubernetes 云原生标准 监控告警 Prometheus + Grafana 开源,社区活跃 日志收集 Loki / ELK 轻量或功能丰富 CI/CD GitLab CI / GitHub Actions 与代码托管集成 实践案例 场景:生产环境故障排查 假设线上服务出现响应延迟,排查步骤如下:...

September 12, 2025 · 1 分钟 · 200 字 · 徐保金

Linux 系统调用追踪:strace 与 ltrace 调试实战

概述 Linux 系统调用追踪:strace 与 ltrace 调试实战是SRE运维工作中的重要技能。在实际生产环境中,掌握这些技术能够有效提升系统的稳定性和运维效率。 为什么需要Linux 系统调用追踪 随着系统规模的扩大和复杂度的增加,传统的运维手段已经难以满足现代分布式系统的需求。Linux 系统调用追踪能够帮助运维团队: 快速定位问题:通过系统化的工具和方法,缩短故障排查时间 提升系统可见性:建立全面的监控和可观测性体系 预防故障发生:通过主动发现和修复潜在风险,降低故障率 优化资源利用:合理分配和调度资源,提升系统性能 核心概念与原理 基础概念 Linux 系统调用追踪的核心在于建立标准化的流程和自动化的工具链。主要包括以下几个方面: 数据收集与处理:从各种数据源收集指标、日志和追踪信息 分析与可视化:通过仪表盘和告警系统展示系统状态 自动化响应:基于预设规则自动执行修复操作 持续优化:根据历史数据和反馈不断改进流程 关键技术点 1. 配置管理 合理的配置管理是Linux 系统调用追踪的基础。建议使用版本控制工具管理配置文件,确保变更可追溯: # 示例:配置版本控制 # 所有配置文件存放在 Git 仓库中 git init /etc/monitoring cd /etc/monitoring git add . git commit -m "Initial monitoring configuration" 2. 自动化工具选择 根据团队技术栈选择合适的工具: 场景 推荐工具 说明 配置管理 Ansible 无代理,适合中小规模 容器编排 Kubernetes 云原生标准 监控告警 Prometheus + Grafana 开源,社区活跃 日志收集 Loki / ELK 轻量或功能丰富 CI/CD GitLab CI / GitHub Actions 与代码托管集成 实践案例 场景:生产环境故障排查 假设线上服务出现响应延迟,排查步骤如下:...

September 11, 2025 · 1 分钟 · 195 字 · 徐保金