目录
微服务架构下,Bug 不一定在代码,大量故障来自:网络、服务器环境、中间件、操作系统、容器 / 云原生配置、基础设施、运维参数、带宽 / 连接数、时间同步、DNS、防火墙等。下面按场景分类,结合 Java 微服务实际业务场景讲清楚现象、原因、排查点。
一、网络层问题(最常见、最难排查)
1. 端口不通 / 端口放行缺失
现象
- 服务注册成功,但调用直接超时、
Connection refused - 本地调试正常,测试 / 生产环境直接调不通
根因
- 服务器防火墙(firewalld/iptables)未放行服务端口
- 云服务器安全组规则限制(入站 / 出站端口、IP 白名单)
- 容器化场景:Docker/ K8s 端口映射错误、Pod 网络策略拦截
微服务典型场景Nacos/Sentinel/RocketMQ/Redis 客户端能连上控制台,但业务服务之间调用不通,就是端口 + 安全组问题。
2. 网络超时、跨机房延迟过高
现象
- 偶尔接口超时、Feign/RestTemplate 调用间歇性失败
- 白天正常,高峰期大量
Read timed out
根因
- 微服务跨机房、跨可用区部署,物理网络延迟高
- 公网调用第三方接口(支付、短信、地图)网络抖动
- 运营商链路不稳定、弱网
Java 特有加重问题
- Feign、OkHttp 未合理配置连接超时、读取超时、重试策略
- 无熔断降级,单次慢调用拖垮整个线程池
3. TCP 连接打满、连接泄漏
现象
- 服务莫名卡死、接口响应极慢,无报错日志
- 服务器
ESTABLISHED连接数爆表 - 无法新建连接,新请求直接阻塞
根因
- 未复用 HTTP 连接,每次调用新建短连接
- 外部资源(数据库、Redis、MQ)连接池配置过小
- 网络断连后,TCP 僵死连接不释放(半开连接)
4. DNS 解析异常 / 解析缓慢
现象
- 服务偶尔注册不上 Nacos、网关路由突然失效
- 首次调用慢、间歇性域名解析失败
根因
- 服务器 DNS 服务器配置不合理、DNS 缓存过期
- 微服务使用域名注册,DNS 抖动导致服务实例列表刷新异常
- Java 默认 DNS 缓存策略过长 / 过短
二、服务器 & 操作系统层问题
1. 服务器资源耗尽(CPU / 内存 / 磁盘)
(1)CPU 飙升
非代码原因:
- 服务器宿主机超配、共享宿主机被其他业务抢占资源
- 系统定时任务(日志切割、备份、杀毒)高峰期抢占 CPU
- 磁盘 IO 过高引发 CPU 等待
(2)内存溢出之外:系统内存不足
非 OOM 代码问题
- 服务器物理内存不足,触发 OOM killer 直接杀掉 Java 进程
- 容器限制内存(Docker/K8s limit)设置过小
- 服务器缓冲区、缓存占用过高,导致 JVM 无法申请堆外内存
(3)磁盘爆满
高频微服务故障:
- 日志无轮转、不压缩,
catalina.out/ 业务日志无限膨胀 - 临时文件、MQ 堆积文件、上传文件未清理
- 磁盘 inode 耗尽(小文件过多,日志碎片、缓存文件)
2. 系统内核参数不合理
高频坑点
file-max最大文件句柄数过小 → Too many open files微服务长连接(Redis、MQ、数据库、网关)多,极易触发- TCP 内核参数:
tcp_keepalive不合理,僵死连接不回收 - 虚拟内存、swap 开启,内存不足时频繁交换磁盘,服务巨卡
3. 时间不同步(隐藏致命问题)
现象
- 分布式定时任务重复执行 / 不执行
- JWT、Token、签名校验失败
- 分布式事务、订单时间错乱、日志时序混乱
根因服务器未配置 NTP 时间同步,多台微服务机器时间偏差几秒~几分钟。
三、中间件 & 基础设施非代码问题
1. Nacos/Eureka 注册发现异常
非代码问题:
- Nacos 服务器集群负载过高、磁盘满、GC 卡顿
- 网络分区:微服务与注册中心心跳断连
- 临时网络抖动导致服务频繁上下线(实例刷屏)
- 环境隔离问题:开发 / 测试 nacos 地址串台
2. Redis 非代码故障
- Redis 服务器内存满、达到 maxmemory,触发淘汰策略导致缓存击穿
- Redis 主从同步延迟、集群槽位迁移
- 网络分区导致缓存读写超时、集群下线
- 未开启持久化,重启数据丢失
3. MQ(RocketMQ/Kafka)问题
- Broker 磁盘爆满、页缓存不足,消息写入阻塞
- 集群节点下线、网络分区,消费堆积
- 服务器磁盘 IO 瓶颈,导致 MQ 收发延迟暴涨
四、容器 & 云原生特有问题(Docker/K8s)
- 资源配额限制CPU / 内存配额压测时被限流、降频,代码没问题但性能上不去
- 容器网络网桥、CNI 插件异常,Pod 之间互通失败
- 镜像时区不对、编码不对,导致日期、中文乱码
- 容器日志驱动限制,日志丢失、截断
五、网关 & 负载均衡层问题
- Nginx / 网关 连接数上限、worker 进程数配置不足
- 负载均衡会话保持、健康检查规则不合理,剔除正常服务
- 上层网关超时时间 < 下游服务超时,上层先断连,业务报超时但服务还在执行
- SSL 证书过期、HTTPS 协议版本不兼容
六、日常排查通用思路(非代码问题专用)
- 先区分:单实例问题 还是 全部服务问题
- 全部异常:网络、DNS、中间件、公共服务器
- 单实例异常:当前机器资源、配置、容器限制
- 优先看基础设施指标CPU、内存、磁盘、磁盘 IO、网络流量、TCP 连接数
- 排除安全组、防火墙、端口、域名连通性
- 查看系统日志
/var/log/messages、容器日志、内核报错 - 核对时间同步、内核参数、文件句柄数
七、Java 微服务优化避坑(针对非代码问题)
- 统一配置:超时时间、连接池大小、心跳检测
- 服务器强制开启 NTP 时间同步
- 所有服务配置日志轮转、自动压缩、过期删除
- 生产环境关闭 swap,调优文件句柄、TCP 内核参数
- 云环境严格梳理安全组、白名单、容器资源限制
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_48309090/article/details/160740120



