检查硬件状态
服务器突然卡死或自动重启,第一反应别急着重装系统。先看看是不是硬件出了问题。内存条松了、硬盘坏道、电源供电不稳,都可能导致系统扛不住。特别是老机器,用个三五年,电容老化很常见。可以进BIOS看看硬件信息,或者用MemTest86测内存,用smartctl查硬盘健康状态。
smartctl -a /dev/sda这条命令能输出硬盘的详细状态,重点关注Reallocated_Sector_Ct和Pending_Sectors这两项,数值偏高基本就是硬盘要挂的前兆。
查看系统日志定位原因
Linux下/var/log/messages或journalctl记录了系统运行的蛛丝马迹。崩溃前如果有大量错误日志,比如内核报错(kernel panic)、OOM(内存耗尽)提示,就能缩小排查范围。比如发现总是某个服务启动后不久就崩,那大概率是那个程序吃资源太猛。
journalctl -x --since="2 hours ago"这条命令查最近两小时的日志,配合-f参数还能实时盯着看,适合复现问题时使用。
限制异常进程资源占用
有时候一个脚本写得有问题,比如无限循环没控制,跑起来就把CPU或内存占满,整个服务器卡成PPT。这时候可以用cgroups或systemd来限制单个服务的资源。比如给某个后台任务设置最多用50%的CPU:
[Service]
CPUQuota=50%写在service文件里,重启服务后就生效。避免某个“熊孩子”进程拖垮全家。
排查网络攻击和连接耗尽
如果服务器突然变慢然后崩溃,也可能是被扫端口或者DDoS了。netstat或ss命令能看当前连接数。要是看到成千上万的ESTABLISHED连接,而且来源IP五花八门,就得警惕了。可以临时用iptables封掉高频访问的IP段,或者上云厂商的防护策略。
ss -s这条命令快速统计当前连接情况,比netstat更轻量。
定期维护别偷懒
就像汽车要保养,服务器也不能放着不管。系统内核有更新就及时打补丁,尤其是安全相关的。软件版本太旧可能有已知漏洞,容易被利用导致崩溃。定时清理日志文件,/var/log下堆了几G的旧日志,不仅占空间,还可能让rsyslog写入卡住引发连锁反应。
还有个小细节:时间同步。服务器时间乱了,证书验证失败、集群节点通信异常这些问题都会冒出来,间接导致服务中断。建议开启chrony或NTP自动校时。
考虑虚拟化环境的特殊性
如果是云服务器或跑在虚拟机里,物理机宿主资源紧张也会连累你。比如邻居租户跑挖矿程序,把宿主机CPU全吃光,你的虚拟机自然跟着卡。这时候联系服务商看看底层负载,必要时迁移到空闲主机。
另外快照打得太多也可能影响IO性能,特别是备份窗口期磁盘响应变慢,应用超时崩溃。合理规划快照频率和保留数量,别图省事一口气留二十个。