关注

java微服务项目中出现的网络、服务器等非代码问题

目录

一、网络层问题(最常见、最难排查)

1. 端口不通 / 端口放行缺失

2. 网络超时、跨机房延迟过高

3. TCP 连接打满、连接泄漏

4. DNS 解析异常 / 解析缓慢

二、服务器 & 操作系统层问题

1. 服务器资源耗尽(CPU / 内存 / 磁盘)

(1)CPU 飙升

(2)内存溢出之外:系统内存不足

(3)磁盘爆满

2. 系统内核参数不合理

3. 时间不同步(隐藏致命问题)

三、中间件 & 基础设施非代码问题

1. Nacos/Eureka 注册发现异常

2. Redis 非代码故障

3. MQ(RocketMQ/Kafka)问题

四、容器 & 云原生特有问题(Docker/K8s)

五、网关 & 负载均衡层问题

六、日常排查通用思路(非代码问题专用)

七、Java 微服务优化避坑(针对非代码问题)


微服务架构下,Bug 不一定在代码,大量故障来自:网络、服务器环境、中间件、操作系统、容器 / 云原生配置、基础设施、运维参数、带宽 / 连接数、时间同步、DNS、防火墙等。下面按场景分类,结合 Java 微服务实际业务场景讲清楚现象、原因、排查点。

一、网络层问题(最常见、最难排查)

1. 端口不通 / 端口放行缺失

现象

  • 服务注册成功,但调用直接超时、Connection refused
  • 本地调试正常,测试 / 生产环境直接调不通

根因

  1. 服务器防火墙(firewalld/iptables)未放行服务端口
  2. 云服务器安全组规则限制(入站 / 出站端口、IP 白名单)
  3. 容器化场景:Docker/ K8s 端口映射错误、Pod 网络策略拦截

微服务典型场景Nacos/Sentinel/RocketMQ/Redis 客户端能连上控制台,但业务服务之间调用不通,就是端口 + 安全组问题。


2. 网络超时、跨机房延迟过高

现象

  • 偶尔接口超时、Feign/RestTemplate 调用间歇性失败
  • 白天正常,高峰期大量Read timed out

根因

  1. 微服务跨机房、跨可用区部署,物理网络延迟高
  2. 公网调用第三方接口(支付、短信、地图)网络抖动
  3. 运营商链路不稳定、弱网

Java 特有加重问题

  • Feign、OkHttp 未合理配置连接超时、读取超时、重试策略
  • 无熔断降级,单次慢调用拖垮整个线程池

3. TCP 连接打满、连接泄漏

现象

  • 服务莫名卡死、接口响应极慢,无报错日志
  • 服务器ESTABLISHED连接数爆表
  • 无法新建连接,新请求直接阻塞

根因

  1. 未复用 HTTP 连接,每次调用新建短连接
  2. 外部资源(数据库、Redis、MQ)连接池配置过小
  3. 网络断连后,TCP 僵死连接不释放(半开连接

4. DNS 解析异常 / 解析缓慢

现象

  • 服务偶尔注册不上 Nacos、网关路由突然失效
  • 首次调用慢、间歇性域名解析失败

根因

  1. 服务器 DNS 服务器配置不合理、DNS 缓存过期
  2. 微服务使用域名注册,DNS 抖动导致服务实例列表刷新异常
  3. Java 默认 DNS 缓存策略过长 / 过短

二、服务器 & 操作系统层问题

1. 服务器资源耗尽(CPU / 内存 / 磁盘)

(1)CPU 飙升

非代码原因:

  • 服务器宿主机超配、共享宿主机被其他业务抢占资源
  • 系统定时任务(日志切割、备份、杀毒)高峰期抢占 CPU
  • 磁盘 IO 过高引发 CPU 等待
(2)内存溢出之外:系统内存不足

非 OOM 代码问题

  • 服务器物理内存不足,触发 OOM killer 直接杀掉 Java 进程
  • 容器限制内存(Docker/K8s limit)设置过小
  • 服务器缓冲区、缓存占用过高,导致 JVM 无法申请堆外内存
(3)磁盘爆满

高频微服务故障:

  1. 日志无轮转、不压缩,catalina.out/ 业务日志无限膨胀
  2. 临时文件、MQ 堆积文件、上传文件未清理
  3. 磁盘 inode 耗尽(小文件过多,日志碎片、缓存文件)

2. 系统内核参数不合理

高频坑点

  1. file-max 最大文件句柄数过小 → Too many open files微服务长连接(Redis、MQ、数据库、网关)多,极易触发
  2. TCP 内核参数:tcp_keepalive 不合理,僵死连接不回收
  3. 虚拟内存、swap 开启,内存不足时频繁交换磁盘,服务巨卡

3. 时间不同步(隐藏致命问题)

现象

  • 分布式定时任务重复执行 / 不执行
  • JWT、Token、签名校验失败
  • 分布式事务、订单时间错乱、日志时序混乱

根因服务器未配置 NTP 时间同步,多台微服务机器时间偏差几秒~几分钟。


三、中间件 & 基础设施非代码问题

1. Nacos/Eureka 注册发现异常

非代码问题:

  1. Nacos 服务器集群负载过高、磁盘满、GC 卡顿
  2. 网络分区:微服务与注册中心心跳断连
  3. 临时网络抖动导致服务频繁上下线(实例刷屏)
  4. 环境隔离问题:开发 / 测试 nacos 地址串台

2. Redis 非代码故障

  1. Redis 服务器内存满、达到 maxmemory,触发淘汰策略导致缓存击穿
  2. Redis 主从同步延迟、集群槽位迁移
  3. 网络分区导致缓存读写超时、集群下线
  4. 未开启持久化,重启数据丢失

3. MQ(RocketMQ/Kafka)问题

  1. Broker 磁盘爆满、页缓存不足,消息写入阻塞
  2. 集群节点下线、网络分区,消费堆积
  3. 服务器磁盘 IO 瓶颈,导致 MQ 收发延迟暴涨

四、容器 & 云原生特有问题(Docker/K8s)

  1. 资源配额限制CPU / 内存配额压测时被限流、降频,代码没问题但性能上不去
  2. 容器网络网桥、CNI 插件异常,Pod 之间互通失败
  3. 镜像时区不对、编码不对,导致日期、中文乱码
  4. 容器日志驱动限制,日志丢失、截断

五、网关 & 负载均衡层问题

  1. Nginx / 网关 连接数上限、worker 进程数配置不足
  2. 负载均衡会话保持、健康检查规则不合理,剔除正常服务
  3. 上层网关超时时间 < 下游服务超时,上层先断连,业务报超时但服务还在执行
  4. SSL 证书过期、HTTPS 协议版本不兼容

六、日常排查通用思路(非代码问题专用)

  1. 先区分:单实例问题 还是 全部服务问题
    • 全部异常:网络、DNS、中间件、公共服务器
    • 单实例异常:当前机器资源、配置、容器限制
  2. 优先看基础设施指标CPU、内存、磁盘、磁盘 IO、网络流量、TCP 连接数
  3. 排除安全组、防火墙、端口、域名连通性
  4. 查看系统日志 /var/log/messages、容器日志、内核报错
  5. 核对时间同步、内核参数、文件句柄数

七、Java 微服务优化避坑(针对非代码问题)

  1. 统一配置:超时时间、连接池大小、心跳检测
  2. 服务器强制开启 NTP 时间同步
  3. 所有服务配置日志轮转、自动压缩、过期删除
  4. 生产环境关闭 swap,调优文件句柄、TCP 内核参数
  5. 云环境严格梳理安全组、白名单、容器资源限制

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_48309090/article/details/160740120

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--