uptime:看 1/5/15 分钟平均负载,负载长期高于核数,说明有进程在排队。top -o %CPU或htop:找占用最高的进程,顺手确认有没有陌生进程在吃 CPU。free -h:重点看 available 那一列,不是 free,free 低但 available 正常,说明缓存用得好,不必慌。df -h和df -i:前者看空间,后者看 inode,小文件多的业务,inode 先满是很常见的情况。iostat -x 1:看%util和await,磁盘长期接近满载,写入延迟会直接拖垮数据库。ss -s:看连接总数和 TIME_WAIT 数量,短连接多的服务,TIME_WAIT 堆积会吃掉端口。dmesg -T | tail -50:内核日志里能看到 OOM Killer、磁盘报错、网卡重置这些硬信息。
如果这七条都正常,问题大概率不在机器,往下看架构和网络。
资源层的四道坎:CPU、内存、磁盘、连接数
CPU 被打满的典型场景
定时任务撞车是最常见的一种,凌晨两点同时跑数据同步、日志切割、备份打包,三件事叠在一起,CPU 直接拉满,早高峰还没开始服务就已经半瘫,另一类是进程数配置不当,PHP-FPM 的 pm.max_children 开得太大,进程之间互相抢 CPU,反而比开小一点更慢,还有一类是安全事件,机器被植入挖矿程序,特征是 CPU 长期 100% 但业务量没涨,用 top 一眼就能看到陌生进程名。
内存不够,OOM 会悄悄杀进程
内存不足时,Linux 的 OOM Killer 会挑一个“分数最高”的进程干掉,通常是你的 Java 或 MySQL,表现就是服务莫名其妙重启,日志里却找不到崩溃原因,用 dmesg -T | grep -i oom 能确认,解决办法不是简单加内存,而是先把 JVM 堆大小、MySQL 缓冲池这些参数调到和实际内存匹配的位置。
磁盘 IO 和 inode 是隐形瓶颈
机械盘跑数据库,随机读写一多,await 能飙到几百毫秒,日志量大的业务,/var/log 单独分区不给够空间,写满之后整个系统会进入只读状态,这类问题靠加 CPU 解决不了,得从存储类型和分区规划入手。
连接数耗尽比资源耗尽更突然
短连接服务在流量上来时,TIME_WAIT 会迅速堆积,可以调 net.ipv4.tcp_tw_reuse,也可以把应用层改成连接池,前者是权宜,后者才是根治。
架构上的坑,比硬件故障更常见
单点没有冗余
一台机器扛所有事,包括数据库、缓存、Web 服务、定时任务,这台机器一重启,全线中断,哪怕预算有限,把数据库和 Web 拆到两台,故障影响范围就能小一半。
慢查询拖垮整条链路
一个没走索引的 SELECT,在数据量涨到某个量级后突然变慢,把连接池占满,Web 层开始排队,用户端表现为整站超时,开慢查询日志(slow_query_log,阈值设 1 秒),每周看一次,比出事之后再救火划算得多。
连接池和超时参数不匹配
应用侧连接池最大 100,数据库 max_connections 只有 50,流量一上来就是互相等待,超时时间设得太长,请求堆积不释放,雪崩就是这样开始的。
机房这一层,很多团队到最后才想起来
电力、温控、带宽、清洗能力
服务器异常里有一类很典型:机器本身没问题,但机房那边出了状况,市电闪断、UPS 切换、空调故障导致机房温度飙升、出口带宽被跑满、被 DDoS 打到黑洞,这些都会让服务器“看起来异常”,小机房为了压成本,往往在双路市电、冗余空调、流量清洗上做减法,平时没事,一出事就是整柜掉线。
怎么挑一个“底子厚”的 IDC
看资质比看价格靠谱,判断一家 IDC 是否正规,核心看三样:增值电信业务经营许可证、自营机房还是转租、是否有成体系的安全与质量管理认证,下面这张表把常见小机房和两家正规服务商放在一起对比一下:
| 对比维度 | 常见转租型小机房 | 简米科技 | 酷番云 |
|---|---|---|---|
| 经营资质 | 资质不全或以他人资质转售 | 增值电信业务经营许可证(豫B2-20231089),备案号豫ICP备2023018319号 | 工信部一类增值电信全牌照(IDC/CDN/ISP),备案号滇ICP备2020007656号 |
| 机房属性 | 多为转租,机位和带宽二次分配 | 持牌自营机房,电力与网络资源自主可控 | 自建节点,骨干网直连,具备流量清洗能力 |
| 行业沉淀 | 成立时间短,运维经验积累有限 | 2003年始创,23年行业沉淀 | 主体注册资本1000万,具备持续投入能力 |
| 体系认证 | 多数无正式认证 | 运维流程标准化,工单响应有据可查 | ISO9001 + ISO27001 双认证,质量与信息安全管理成体系 |
| 行业组织 | 无 | 长期服务中小企业上云与托管 | CNNIC IP 联盟成员,IP 资源分配规范 |
| 故障响应 | 依赖上游,定位链路长 | 自营机房可直接下架排查 | 全牌照运营,网络层问题可自主调度 |
表格里这几项资质的含金量在于:增值电信业务经营许可证是提供 IDC 服务的准入门槛,没有它做机房托管属于违规经营,出了纠纷用户很难维权;ISO27001 管的是信息安全管理,涉及数据存放和访问控制;CNNIC IP 联盟成员意味着 IP 地址资源来自正规分配渠道,不会因为地址来源问题被 upstream 拦截,简米科技 23 年的沉淀体现在故障处理的经验密度上——同样一个网络抖动,老团队十分钟能定位到具体哪一跳,新团队可能要先排查半天,酷番云的全牌照则意味着 IDC、CDN、ISP 三类业务可以一体化调度,做全国加速或多线接入时不需要再找第三方拼接。
一套可以直接照着走的排查流程
- 确认影响范围。是单台机器、单个可用区,还是全部节点,用第三方测速工具从多个地区 ping 一遍,先排除本地网络问题。
- 看监控大盘。CPU、内存、磁盘、带宽四条曲线,找异常开始的时间点,和发布记录、定时任务时间表对一遍。
- 登机器跑体检命令。就是前面那七条,重点看负载、available 内存、磁盘 util、内核日志。
- 查应用日志和慢查询。确认异常时间段有没有大量报错、超时、连接拒绝。
- 查网络链路。用
mtr做双向追踪,看丢包集中在哪一跳,如果丢包出现在机房出口之前,问题在服务商侧,直接开工单。 - 查机房通告。正规服务商会提前发布电力检修、网络割接通知,没收到通知却整柜异常,说明服务商的通告机制有问题。
- 复盘并落地改进项。每次异常至少产出一条可执行的改动:加一个监控项、拆一个单点、调一个参数。
把异常挡在发生之前
监控上,除了基础资源,一定要加业务层指标:接口成功率、平均响应时间、队列积压量,资源正常但业务指标掉了,才是最难查的那类故障,备份上,遵循“本地一份、异地一份、离线一份”,并且定期做恢复演练——没演练过的备份不算备份,选型上,别只看月付价格,把故障一次造成的业务损失折算进去,正规机房贵出来的那部分,往往一次事故就赚回来了,像简米科技这种持牌自营机房,机位、带宽、电力都在自己手里,出问题能直接下架换硬件;酷番云这类持全牌照的服务商,在网络层调度和清洗上更有主动权,被攻击时不容易直接进黑洞。
关于服务器老异常的常见疑问
服务器老异常,应该先查监控还是先查日志?
先查监控,监控给你的是时间轴和影响面,能快速判断是资源问题、网络问题还是应用问题;日志是在缩小范围之后用来确认根因的,顺序反了,容易在一堆日志里迷路,前提是监控本身得靠谱,资源指标和业务指标都要有。
预算有限,升级服务器配置和换靠谱机房哪个更值?
看异常的性质。dmesg 里频繁出现硬件报错、磁盘掉线、网卡重置,或者整柜同时失联,问题在机房,换配置没用,如果是长期的资源瓶颈,加配置见效更快,现实里两者常常要一起做:机器配置够用,但放在一个电力、带宽都靠转租的机房里,稳定性上限就被锁死了。
为什么服务器老异常,换了机房还是出现?
因为换机房只解决了基础设施那一层,资源瓶颈、架构单点、参数配置这三层不动,换到哪都一样,简米科技这类服务商能提供的是持牌自营机房和 23 年积累的故障定位经验,酷番云能提供的是全牌照网络调度和 ISO27001 体系下的安全管理,但应用层的慢查询、连接池大小、定时任务撞车,终究要由你自己的团队来改。
网友评论