资讯动态

服务器卡死排查实战:从现象分类到根因定位的完整手册

发布时间:2026/9/8 13:00:51 来源:尧图企业网站定制
1. 从“土豆服务器”说起卡死到底卡在哪先聊个轻松的。经常玩游戏的朋友应该对“土豆服务器”这个词不陌生说的就是厂商提供的游戏服务器性能太差一到晚上高峰期或者开新活动延迟飙升、掉线、进不去房间甚至直接卡死。“真投入现场”这句吐槽翻译过来就是服务器又扛不住了战斗/活动/项目现场直接瘫痪。不过如果你以为“土豆服务器”只存在于游戏圈那就低估了它的覆盖面。在真实的服务器运维里卡死同样是出现频率极高的故障词。你随手搜一下就能看到大量提问Linux 图形化界面卡死只剩文字黑底Ubuntu 系统卡死不动鼠标键盘全无响应rsync 复制文件卡死进程不退出也不报错vscode 连接 SSH 远程服务器卡在连接中Windows Server 上右键文件夹就卡死甚至 STM32 单片机的 delay 延时函数和 IAP 跳转后 HAL_Delay 卡死也被归类到“卡死”一类。这些场景跨越了云服务器、物理服务器、嵌入式设备、桌面系统但它们背后有一个共性问题系统或进程失去了对外界的正常响应能力且没有自动恢复。本文就围绕“服务器卡死”这个主题从现象分类、根因分析、排查命令、典型场景到预防治理整理一套实战可用的排查手册。不管你是刚接触服务器的新手还是已经在做运维、部署、开发的老手都可以照着排查思路走一遍。2. 服务器卡死的类型与常见场景服务器卡死不是一个单一故障而是一类故障的总称。排查前先分类能直接缩小范围。按我的经验可以从四个维度来分。2.1 按资源维度分类CPU、内存、磁盘、网络CPU 耗尽型卡死表现系统还能 ping 通但 SSH 登录极慢执行top都要等几秒。进程列表里某个进程 CPU 占用超过 100%多核场景。常见原因死循环、正则灾难性回溯、GC 频繁 Full GC、挖矿木马、异常的业务流量。内存耗尽型卡死表现free -h显示 available 接近 0SWAP 被写满系统开始频繁换页响应极慢甚至完全无响应。常见原因内存泄漏、并发请求过多、没有限制的缓存、OOM Killer 反复杀进程又反复拉起。磁盘 IO 耗尽型卡死表现命令能输入但执行极慢iostat显示 util 接近 100%top里大量 D 状态不可中断睡眠进程。常见原因日志写爆磁盘、数据库慢查询大量刷盘、rsync 复制大文件、机械硬盘坏道、RAID 降级重建。网络中断型卡死表现从外部无法连接但服务器本机操作正常。用户侧看到的“卡死”实际是网络不通。常见原因网卡故障、iptables 规则误配、DNS 解析失败、带宽跑满、交换机端口异常。2.2 按系统层级分类应用层、内核层、硬件层应用层卡死某个进程不响应但系统整体正常。比如 Java 应用线程池耗尽、数据库连接池占满、Nginx worker 进程 hang 住。内核层卡死整个系统无响应键盘鼠标失效网络也不通。常见于内核死锁、驱动 bug、文件系统挂载异常。硬件层卡死内存错误、CPU 过热、磁盘坏道、电源不稳会导致系统随机死机或重启。2.3 按触发场景分类部署变更、数据复制、外设接入从热搜词里能看到很多具体场景rsync 复制文件卡死—— 大量小文件复制、目标磁盘满、NFS 挂载断连u盘错误检查进度卡死—— 坏的 USB 存储设备、文件系统损坏、控制器 bug安装 fedora40 卡死—— 显卡驱动、 nouveau 开源驱动兼容问题、内核参数冲突windows 10 cmd 总是卡死—— 输入法冲突、控制台宿主程序异常、恶意软件、杀毒软件扫描stm32 延时函数 delay 卡死—— 常发生在系统时钟配置错误、中断优先级冲突、IAP 跳转后中断向量表未重映射。这些场景说明一个关键问题**卡死往往不是孤立因素而是多个条件叠加的结果。**排查时不要只盯一个点。2.4 按恢复方式分类可自动恢复、可干预恢复、必须硬重启偶发一次、几分钟后自动恢复大概率是瞬时资源争抢或网络抖动SSH 能进但操作极慢资源耗尽型通常可以远程干预远程完全无响应、本机也无响应需要带外管理IPMI/iDRAC或物理重启。判断恢复方式决定了你最初的应急动作是先等一等还是直接准备重启预案。3. “真投入现场”后服务器卡死排查五步法“真投入现场”意味着时间紧迫、问题真实发生、不能再靠猜。下面这套排查流程我建议你直接抄进笔记线上遇到问题照着走。3.1 第一步确认现场不能盲目重启很多人的第一反应是直接重启把服务拉起来。但重启会丢失现场信息——内存里的进程状态、内核日志、文件系统缓存全部丢失等于把案发现场毁掉了。正确做法确认自己能通过什么方式登录SSH、VNC、ipmi、物理控制台如果 SSH 还能用先不要重启按下面步骤收集信息。如果 SSH 完全不通优先尝试带外管理如华为 iBMC、Dell iDRAC、HP iLO看看能否截屏、看串口日志。如果带外也没有只能硬重启重启前记录现象、时间、最近变更。这里特别提醒**除非服务完全不可恢复否则永远先保留现场再重启。**有些卡死问题重启后不会复现没有现场数据就只能靠猜。3.2 第二步收集基础指标判断是谁把资源吃掉了登录服务器后按顺序执行以下命令以 Linux 为例。# 查看系统负载、运行时间、登录用户 uptime # 查看 CPU 和内存占用 TOP 进程 top # 查看物理内存和 SWAP 使用 free -h # 查看磁盘空间 df -hT # 查看磁盘 IO 状态 iostat -x 1 5 # 查看网络连接状态 ss -tunapuptime输出中的 load average 是三个数值分别代表 1 分钟、5 分钟、15 分钟的平均负载。如果 1 分钟负载远高于 15 分钟说明系统是最近才被拖垮的如果三个值都很高说明已经持续了较长时间。top进入交互界面后按P按 CPU 排序按M按内存排序按D按磁盘 IO 排序部分版本支持注意观察进程状态R运行中、S可中断睡眠、D不可中断睡眠、Z僵尸进程。我见过很多次“卡死”其实是磁盘 IO 打满进程大量处于 D 状态此时 CPU 占用反而不高。3.3 第三步翻系统和内核日志找报错线索基础指标只能告诉你“哪里紧张”日志才能告诉你“为什么紧张”。# 查看内核日志重点看硬件错误、OOM、文件系统、驱动相关 dmesg -T | tail -n 200 # 查看系统日志包含服务状态 journalctl -xe --since 10 minutes ago # 查看最近登录和认证记录 last重点关注以下关键字Out of memory—— 内存耗尽OOM Killer 触发hung_task—— 内核检测到进程长时间不响应blocked for more than 120 seconds—— 通常是磁盘 IO 问题EXT4-fs error、XFS—— 文件系统异常watchdog—— 硬件看门狗或系统 hang 检测soft lockup/hard lockup—— CPU 内核线程卡死。举个例子如果日志里出现大量INFO: task rsync:12345 blocked for more than 120 seconds.基本可以判断 rsync 进程卡在了 IO 等待上。这时候再配合lsblk、iostat、dmesg查看磁盘设备往往能找到是哪块盘出了问题。3.4 第四步定位具体进程抓取调用栈如果系统还能执行命令可以进一步深入定位。# 查看进程的线程数和状态 ps -eLf | grep pid # 查看进程的运行栈 cat /proc/pid/stack # 查看进程打开的文件描述符 ls -l /proc/pid/fd | wc -l # 查看进程的工作目录、启动命令、环境变量 cat /proc/pid/cmdline cat /proc/pid/environ如果是 Java 应用卡死抓线程栈# 先找到 Java 进程 PID jps -l # 导出线程 dump jstack pid thread_dump.txt如果是 Python 应用可以用 py-spypy-spy dump --pid pid重点观察线程栈中反复出现的同一个锁、同一个等待点。例如大量线程停在Object.wait()说明线程池被占满任务队列积压应用实际上已经无法处理新请求。3.5 第五步决策与止损信息收集完成后要做决策。如果是资源耗尽导致可以尝试kill异常进程、清理日志文件、释放磁盘空间。如果是内核 hang 住基本无法远程解决需要安排带外重启或物理重启。如果是应用层死锁保留 dump 文件后重启应用即可。# 强制终止卡死的进程 kill -9 pid # 若无法终止D 状态只能重启系统 reboot注意一个常识D 状态的进程用 kill -9 也无法杀掉因为它正在内核态等待 IO 完成。这种情况只能等 IO 超时或者重置硬件或者直接重启系统。4. 高频卡死场景实战分析这一节选取几个热搜里出现频率很高的场景每个场景给出现象、根因和解决办法方便你按图索骥。4.1 Linux 图形化界面卡死只剩文字黑底现象Fedora、Ubuntu Desktop 等 Linux 操作系统在使用过程中桌面环境突然卡死屏幕黑底白字鼠标键盘无响应只能强制重启。常见原因显卡驱动不兼容。很多 Linux 桌面卡死与 NVIDIA 闭源驱动、AMD 开源驱动的冲突有关。内存不足导致桌面合成器如 GNOME Shell、KWin被 OOM 杀掉。系统休眠/唤醒流程 bug。排查思路尝试切换到 TTY按Ctrl Alt F2部分系统是 F3-F6如果能看到登录终端说明桌面进程崩溃但系统内核还活着。登录后查看日志。# 查看图形相关的日志 journalctl -xe --grepgnome-shell|kwin|Xorg如果确实是显卡驱动问题可以在内核启动参数里加入nomodeset临时禁用内核模式设置用基础驱动进入系统。# 编辑 grub在内核行末尾加 nomodeset sudo vim /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTquiet splash nomodeset# 重新生成 grub 配置 sudo update-grub sudo reboot提示这只是排查手段不是长期方案。长期使用还是建议根据发行版要求安装对应版本的官方驱动或者使用发行版自带的驱动管理工具。4.2 Ubuntu 系统卡死不动完全无响应现象Ubuntu 服务器或桌面系统运行一段时间后鼠标、键盘、网络全无响应画面冻结。排查步骤先确认是内核 hang 还是桌面环境卡死。按Ctrl Alt F2切换 TTY可切换到说明内核还活着。如果 TTY 也切不过去大概率内核级卡死需要用 sysrq 键尝试紧急操作。Linux 内核提供了一套 Magic SysRq 快捷键可以在系统卡死时执行低级别操作。先确认是否开启cat /proc/sys/kernel/sysrq如果输出为0说明被禁用。可以临时开启echo 1 /proc/sys/kernel/sysrq常用 SysRq 组合键Alt SysRq 字母SysRq 通常是 Print Screen 键按键作用Alt SysRq S同步所有文件系统Alt SysRq U重新挂载所有文件系统为只读Alt SysRq B立即重启数据可能有丢失风险Alt SysRq O关机Alt SysRq T打印当前任务列表Alt SysRq W打印所有阻塞进程的内核栈在使用 SysRq 之前必须先执行 S 和 U 尽量保证文件系统数据安全再考虑 B 重启。重要安全提醒这些操作只应在你自己合法管理的测试或生产服务器上使用且重启始终伴随数据丢失风险。线上操作前请确认数据备份可行。4.3 rsync 复制文件卡死进程挂住不动现象用 rsync 同步服务器数据时进度条长时间不动进程既不退出也不报错。常见原因目标磁盘空间不足rsync 一直在重试写入源端或目标端是 NFS/SMB 挂载盘网络断连导致 IO 阻塞复制大量小文件时单线程性能极低看似卡死文件系统坏块或坏道导致 IO 长时间等待。排查命令# 查看磁盘空间 df -hT # 查看磁盘是否有 IO 错误 dmesg -T | tail -n 100 # 查看 rsync 进程状态 ps -el | grep rsync如果 rsync 的状态是D不可中断睡眠基本是 IO 阻塞。可以用strace追踪strace -p rsync_pid -f -t -e tracefile,network观察卡在哪个系统调用上。如果卡在write上查目标盘卡在read上查源盘卡在connect上查网络。改进方案# 在 rsync 中加入超时参数避免永久阻塞 rsync -avP --timeout30 --contimeout10 /source/ userhost:/dest/ # 使用增量同步 限速减少 IO 压力 rsync -avz --partial --inplace --bwlimit50000 /source/ /dest/--timeout控制网络 IO 超时--bwlimit限制带宽--inplace在目标文件上直接覆盖而不是先写临时文件再改名适合大文件场景。4.4 Windows 10/11 系统卡死cmd 卡死、右键卡死、鼠标左键无响应热搜里 Windows 相关卡死问题不少比如Windows 10 CMD 总是卡死Windows 11 鼠标左键卡死系统无响应Win10 右键文件夹就卡死。这在服务器 Windows Server 上同样可能出现。常见原因和排查方向如下。文件资源管理器右键卡死安装的第三方软件压缩工具、网盘同步、杀毒软件注册了右键菜单响应缓慢或死锁。显卡驱动老旧。解决办法# 重启文件资源管理器进程 Stop-Process -Name explorer -Force Start-Process explorer如果无效可以使用 ShellExView 类工具检查并禁用可疑的右键菜单扩展。CMD / PowerShell 卡死杀毒软件实时扫描控制台程序输入法冲突中文输入法导致控制台 hang 常见网络驱动器映射断连执行命令时访问了不存在的网络路径。排查方法在 cmd 里临时禁用输入法检查网络映射net use鼠标左键无响应系统资源耗尽桌面进程无法响应驱动冲突。优先按Ctrl Shift Esc打开任务管理器。如果任务管理器打不开按Ctrl Alt Delete进入安全菜单选择“任务管理器”。若仍无响应尝试强制重启。注意Windows 服务器上遇到此类问题不要直接在物理机前乱操作先判断是否可以通过远程桌面、带外管理登录收集事件日志系统日志里Event ID 41代表非正常断电/重启Event ID 1001可能是 BugCheck 蓝屏记录。4.5 嵌入式领域STM32 delay 延时函数卡死、IAP 跳转后 HAL_Delay 卡死虽然这不是“服务器”但热搜里反复出现而且排查逻辑和服务器非常像。简单提一下方向。现象STM32 调用HAL_Delay()后程序不往下走或者在 IAP 跳转到 App 后调用延时函数时卡死。常见原因系统时钟未初始化或配置错误。HAL_Delay()依赖SysTick中断如果中断被关闭或优先级配置错误延时无法返回。IAP 跳转后中断向量表未重映射。App 里仍使用 Bootloader 的向量表中断一触发就跳回错误地址。在中断服务函数里调用HAL_Delay()抢占冲突导致卡死。检查点确认SystemClock_Config()正确执行跳转前设置SCB-VTOR为重定向的 App 向量表地址不要在中断回调里调用阻塞延时。// IAP 跳转前重映射向量表示例 SCB-VTOR APP_ADDRESS; __set_MSP(*(volatile uint32_t *)APP_ADDRESS);嵌入式排查手法和服务器是相通的先看时钟/中断类似看内核日志再看资源竞争类似看锁等待再定位具体卡在哪个函数。4.6 服务器虚拟化与云服务器场景注意点热搜词里“服务器虚拟化”“云服务器”“时间服务器”“服务器集群”出现频率很高挑两个与卡死相关的重要注意点。云服务器卡死云服务器本质上是宿主机上的虚拟机。如果宿主机资源超卖严重或同一物理机上的“邻居”实例疯狂抢占资源你的云主机可能会感受到严重的性能下降甚至类似卡死的现象。排查时先看监控指标区分是实例内部问题还是宿主机问题。如果是云平台宿主机问题只能提交工单让云厂商处理。时间服务器NTP相关卡死这不是说 NTP 本身会导致卡死而是当系统时间被 NTP 大幅跳变后某些对时间敏感的应用如消息队列、证书校验、定时任务可能在同一时刻集中超时或重试表现为服务突然不可用。排查时要检查chronyc tracking或ntpq -p看是否有异常跳变。# 查看时间同步状态 timedatectl status chronyc tracking5. 服务器卡死的预防与长期治理排查只能解决当下的问题真正要减少“真投入现场”的次数得靠预防和治理。5.1 建好监控告警别等卡死才发现不要让卡死成为第一个被感知的问题。至少建设以下指标监控CPU使用率、负载、单个进程 CPU 占用内存物理内存使用率、SWAP 使用率、OOM 事件磁盘空间使用率、inode 使用率、磁盘读写延迟、IO 队列长度网络带宽流量、连接数、丢包率、TCP 重传率系统内核日志中的 ERROR/WARN 关键字、关键进程存活状态。以 Prometheus Grafana 为例核心监控组件通常包括# prometheus.yml 中的采集任务示例 scrape_configs: - job_name: node_exporter static_configs: - targets: [192.168.1.10:9100]再配合 Alertmanager 设置磁盘空间超过 80%、内存使用率超过 90%、节点 5 分钟不可达等规则。目标是在用户骂“土豆服务器”之前群里先收到告警。5.2 日志集中管理避免登录到每台机器翻日志卡死排查最耗时的往往不是找不到原因而是登错机器、翻错日志。生产环境尽量搭建集中日志平台可以是 ELKElasticsearch Logstash Kibana也可以是 Loki Grafana。所有服务器的/var/log/messages、/var/log/syslog、应用日志统一采集到日志平台按关键字搜索“Out of memory”“hung_task”“Java OutOfMemoryError”等几秒钟就能定位哪些机器最近出现过危险日志。5.3 容量规划要留余量特别是小规格服务器很多“土豆服务器”问题的根源是硬件配置太低。比如 1C1G 的云服务器跑数据库 Web 服务 监控 agent高峰期内存马上打满Swap 一启动系统就进入半死状态。容量规划建议CPU按业务高峰的 1.5 ~ 2 倍留余量内存保证 Swap 基本用不到必要时禁用 Swap磁盘保留 20% 空闲空间日志分区单独挂载并配置 logrotate 轮转切割数据库服务器优先保证内存和磁盘 IO 性能机械盘换 SSD 见效最明显。5.4 变更管理每次变更都要有回滚预案我遇到过的服务器卡死案例里有相当一部分是人为变更引起的升级内核没验证、改了内核参数没重启、误删文件、防火墙规则写错、更新驱动后重启失败。生产环境变更的原则变更前备份配置、数据库数据先在测试环境完整演练一遍选择业务低峰期操作变更后留存操作记录便于回滚重要参数变更先记录当前值。# 示例修改内核参数前备份 cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date %Y%m%d%H%M%S) # 重新加载内核参数观察是否异常 sysctl -p5.5 硬件服务器的带外管理必须配好对于自建机房的物理服务器带外管理iDRAC/iLO/iBMC是卡死时的最后一张王牌。没有带外管理服务器远程 SSH 断掉后就只能物理跑机房。带外管理至少做到配置独立的带外管理 IP不能与业务网混在一起开启硬件监控CPU 温度、风扇转速、电源状态定期检查带外管理固件是否需要更新测试过远程开关机、远程挂载 ISO 等操作是否能正常执行。6. 常见问题速查表下面把前面分析过的典型卡死场景汇总成一张速查表适合贴在运维手册里。问题现象常见原因快速排查命令/动作解决思路SSH 能连但命令执行极慢内存耗尽/磁盘 IO 打满top、free -h、iostat -x定位高占用进程清理或扩容进程处于 D 状态无法 kill磁盘 IO 阻塞dmesg -T查看内核日志等待 IO 恢复或重启系统Linux 图形界面黑屏卡死显卡驱动冲突切 TTY查看日志内核参数加 nomodeset 或换驱动rsync 复制卡住不动磁盘空间不足/NFS 断连df -hT、dmesg清理空间添加超时参数CMD/PowerShell 卡死杀毒/输入法/网络映射禁用输入法、net use排查并关闭可疑扩展鼠标键盘全无响应资源耗尽/内核 hangSysRq 键尝试同步带外管理重启STM32 HAL_Delay 卡死SysTick 中断异常检查时钟、中断向量表重新配置时钟重映射 VTOR系统日志出现 Out of memory内存耗尽journalctl -xe排查内存泄漏优化 JVM/应用参数服务器集群单节点不可用网络分区/硬件故障ping、ip a、带外管理隔离节点处理硬件或网络7. 卡死现场排查 CheckList把前面提到的排查步骤压缩成一份清单建议打印出来或存到笔记工具里。确认故障范围单台服务器还是整个集群本机现象还是远程现象尝试多种方式登录SSH、VNC、带外管理、物理控制台。收集基础资源指标uptime、top、free -h、df -hT、iostat。查看内核和系统日志dmesg -T、journalctl -xe搜索 OOM、hung_task、blocked、soft lockup 关键字。定位具体进程ps -ef、cat /proc/pid/stack、strace -p pid。保存现场进程 dump、线程 dump、日志副本、内存信息如果有条件。决策止损kill 异常进程、重启应用、重启系统。复盘总结根因是什么如何监控预警如何避免再次发生一份现场记录应该包含发生时间、持续时间、影响范围、最近一次变更、当时的监控截图、关键日志片段、执行过的命令和结果。不要相信记忆力服务器卡死复盘时记录越完整根因定位越轻松。对于还在学习和实践阶段的朋友建议你找一台测试虚拟机故意制造几种卡死场景练手比如写一个死循环吃满 CPU、用 dd 填满磁盘、启动一个内存泄漏程序。然后按照上面的排查流程走一遍亲眼看看top和dmesg里会出现什么。这个过程比看十篇文章都有效。服务器卡死不是“玄学”它是一套可以系统化排查和预防的工程问题只是在问题发生时需要你保持冷静按流程操作。把现场保留好、把日志拿全、把指标记录下来大部分卡死问题都能找到根因而你的排查速度会随着经验的积累越来越快。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价