1.
前置准备与安全策略
- 确保有权限:root或sudo权限,SSH密钥可用;
- 先做好保护措施:在做修复前创建快照或备份(云平台快照、LVM快照或rsync备份);
- 打开稳定的远程会话:使用 tmux 或 screen 以防断开连接导致操作中断;
2.
第一步:确认重启时间与影响范围
- 登录并查看最近重启记录:last -x | head -n 20;
- 查看系统启动次数及启动时间:journalctl --list-boots 或 cat /proc/uptime;
- 确认受影响服务与业务:检查负载均衡、集群成员状态、监控告警时间线(Prometheus/Zabbix/Datadog);
3.
第二步:收集核心日志(按优先级)
- 系统日志:journalctl -b -1 --no-pager > /tmp/journal_prev.log(上一次引导的日志);
- 内核日志:dmesg -T | tail -n 200 或 journalctl -k --since "YYYY-MM-DD HH:MM";
- 应用与服务日志:tail -n 200 /var/log/syslog 或 /var/log/messages、nginx/var/www/app.log 等;
- 硬盘与 SMART:smartctl -a /dev/sda;网络设备:ip addr; ethtool eth0;
4.
第三步:定位重启原因(常见项与命令)
- OOM(内存不足):grep -i oom /var/log/messages 或 journalctl | grep -i -E "oom|Out of memory";
- kernel panic/bug:journalctl -k | grep -i panic 或 dmesg 中的 trace;
- 自动更新或内核升级触发:rpm -qa --last | head,apt history 或 /var/log/apt/history.log;
- 硬件/磁盘故障:smartctl 报错、/var/log/kern.log 有 I/O 错误;
5.
第四步:现场修复操作(按问题分类)
- 如果是 OOM:查找占用进程 ps aux --sort=-%mem | head;临时释放:systemctl restart 相关服务或 kill -9 PID;长期:增加 swap 或内存、优化内存泄露;
- 若为内核/驱动问题:回滚内核到之前版本(grub 选择旧内核),或通过包管理器安装已知稳定内核并重启;
- 磁盘 I/O 故障:卸载受影响文件系统,运行 fsck -y /dev/sdXN(在维护模式或离线环境),必要时从快照恢复数据;
- 自动更新导致服务异常:rollback 包或从备份恢复配置,禁用自动更新(在 apt/yum 中 pin 或 yum-plugin-versionlock);
6.
第五步:验证与灰度恢复
- 逐服务启动与健康检查:systemctl start/enable 服务,systemctl status svc;
- 检查业务链路:curl -I 本地服务端点、检查依赖数据库连接与延迟;
- 灰度流量路由:将流量先导向少量实例验证稳定后再全面回流;
7.
第六步:补救与加固建议
- 建议立即:启用持久化日志(集中式日志采集 ELK/EFK);配置自动快照与备份策略;
- 中长期:增加监控规则(OOM、磁盘 I/O、内核 panic 警报)、定期演练回滚、禁用非必要自动升级;
8.
问题1:如何快速判断重启是被动(崩溃)还是主动(人为/自动更新)?
答:首先比对重启时间与自动更新日志(/var/log/apt/history.log 或 yum history),若有升级记录且时间一致,多半是自动更新;其次查看 journalctl -b -1 的末尾条目,若有 kernel panic/OOM/killed 记录则为被动崩溃;若日志显示 systemd 或 reboot 命令触发,则为主动重启。
9.
问题2:在日本机房的服务器有地域性特殊注意事项吗?
答:有几点注意:时区与 NTP 设置要确认(timedatectl status),避免时间漂移导致日志混乱;镜像源选择就近(日本或亚太镜像)以加快更新;同时注意云厂商在该区域的快照与网络策略差异,备份策略应就地与异地结合。
10.
问题3:日志不足或被覆盖时怎样补救追溯?
答:若本机日志丢失,优先从集中日志系统(若有)或监控告警中恢复时间线;其次查询相邻服务或节点的日志(负载均衡、数据库连接端)以侧面补充;最后从存储快照或备份恢复文件进行离线分析,同时在今后开启更长保留期和远端归档。
来源:运维实战 流浪2重启日本服务器后的日志分析与修复流程