服务器宕机与服务崩溃排查及解决方案
一、服务器宕机排查及解决方案
Windows 服务器宕机排查
事件查看器分析
打开"事件查看器" → "Windows 日志" → "系统"
查找关键错误(红色标记)和警告(黄色标记)
重点关注事件ID:41(意外关机), 6008(异常关机), 1001(蓝屏信息)
内存转储分析
检查C:\Windows\Minidump目录下的.dmp文件
使用WinDbg或BlueScreenView工具分析
性能监控
使用性能监视器(perfmon)检查CPU、内存、磁盘使用情况
检查任务管理器中资源占用高的进程
常见解决方案
更新系统补丁和驱动程序
检查硬件健康状况(内存测试、磁盘检查)
调整虚拟内存设置
禁用非必要服务和启动项
Linux 服务器宕机排查
系统日志分析
# 查看系统日志 journalctl -xb # 或 cat /var/log/messages cat /var/log/syslog cat /var/log/kern.log
内存和OOM分析
# 检查内存使用情况 free -h # 检查OOM killer日志 dmesg | grep -i "oom"
内核崩溃分析
# 检查内核崩溃转储 cat /var/crash/* # 使用crash工具分析 crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/<dumpfile>
常见解决方案
调整OOM killer参数
升级内核版本
增加交换分区大小
优化内存使用配置
二、服务崩溃排查及解决方案
Windows 服务崩溃排查
服务日志检查
事件查看器 → "应用程序"日志
查找服务相关错误事件
服务恢复配置
services.msc → 右键服务 → 属性 → "恢复"选项卡
配置第一次、第二次和后续失败时的操作
进程转储分析
使用procdump创建崩溃转储
procdump -ma -e -w servicename.exe
Linux 服务崩溃排查
服务日志检查
# systemd服务日志 journalctl -u service_name -xb # 传统init.d服务日志通常在 cat /var/log/service_name.log
核心转储分析
# 启用核心转储 ulimit -c unlimited echo "/tmp/core.%e.%p" > /proc/sys/kernel/core_pattern # 分析核心转储 gdb /path/to/binary /path/to/core
strace跟踪
strace -f -o service_strace.log /etc/init.d/service start
Docker 容器服务崩溃排查
容器日志检查
docker logs [container_id] docker logs --tail 100 -f [container_id] # 实时查看最后100行
容器内进程检查
docker top [container_id] docker exec -it [container_id] ps aux
容器资源限制检查
docker stats [container_id] docker inspect [container_id] | grep -i mem
常见解决方案
增加容器内存限制
调整应用配置适应容器环境
检查应用对信号处理的正确性
确保应用日志输出到stdout/stderr
三、通用排查流程
信息收集
记录崩溃时间、频率和模式
收集系统资源使用情况(CPU、内存、磁盘、网络)
收集应用和系统日志
重现问题
尝试在测试环境重现
监控系统资源变化
隔离问题
通过排除法确定问题范围
检查最近变更(更新、配置修改等)
解决方案实施
实施最小化修改
监控解决方案效果
准备回滚方案
预防措施
建立监控告警系统
实施定期健康检查
完善日志收集和分析流程
四、常用工具推荐
Windows
Process Explorer: 高级进程管理
Resource Monitor: 资源监控
PerfMon: 性能监控
WinDbg: 内存转储分析
Linux
htop/top: 进程监控
vmstat/iostat: 系统资源监控
netstat/ss: 网络连接检查
lsof: 打开文件检查
tcpdump: 网络抓包
Docker
ctop: 容器监控
dive: 镜像分析
docker-compose: 多容器管理
portainer: 可视化容器管理