0

0

strace -f -e trace=network 发现大量 connect/reset 的业务层排查

舞夢輝影

舞夢輝影

发布时间:2026-01-22 20:06:10

|

368人浏览过

|

来源于php中文网

原创

大量 connect() 后紧接 close() 或 sendto() 失败,主因是业务逻辑或中间件配置异常;需排查连接发起方、断开原因及重试控制,检查目标地址、端口、连接池配置、服务状态及客户端库策略。

strace -f -e trace=network 发现大量 connect/reset 的业务层排查

strace -f -e trace=network 显示大量 connect() 调用后紧跟着 close()sendto() 失败(如 ECONNRESETECONNREFUSED),通常不是内核或网络设备问题,而是业务逻辑或中间件配置异常导致的主动/被动连接中断。排查需聚焦在「谁发起连接」「为何立刻断开」「是否重试失控」三个层面。

确认连接发起方和目标地址

strace 输出中每条 connect( sockfd, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("10.20.30.40")}, ...) 都包含目标 IP 和端口。重点关注:

  • 目标地址是否为预期服务(如本该连本地 Redis 却连了已下线的旧集群 IP)
  • 端口是否匹配实际服务监听端口(如应用配了 6379,但 Redis 实际启在 6380)
  • 同一进程是否高频重复连接同一地址(比如循环里 new client 未复用)

检查连接建立后的行为模式

观察 strace 中 connect() 后是否立即出现 write()/sendto() + ECONNRESET,或 close() 调用:

Dora
Dora

创建令人惊叹的3D动画网站,无需编写一行代码。

下载
  • 成功 connect 后立刻 send 失败:大概率远端服务拒绝请求(协议不匹配、认证失败、连接数超限),可抓包验证服务端响应
  • connect 成功后立即 close:常见于连接池未命中时新建连接又因超时/条件不满足被丢弃,需查连接池配置(如 maxIdle=0、minIdle=0 导致无复用)
  • connect 返回 ECONNREFUSED:目标端口无进程监听,或防火墙拦截,优先检查服务是否存活、端口监听状态(ss -tlnp | grep :port

定位触发连接的业务代码路径

strace 的 -f 会显示子进程/线程,结合 -p PID-e trace=network,process 可关联系统调用与进程树。更高效方式是:

  • lsof -i -p $PID 查看当前所有 socket 连接状态,比对 strace 中异常连接是否持续存在
  • 在应用层开启 debug 日志(如 Java 的 -Djavax.net.debug=ssl:handshake 或 HTTP 客户端日志),定位哪段业务代码触发连接
  • 检查是否有定时任务、健康检查探针、或异常兜底逻辑(如降级时疯狂重试不可用服务)

排除中间件与客户端库行为

很多连接重置源于客户端库的默认策略:

  • HTTP 客户端(如 OkHttp、Apache HttpClient)默认启用 keep-alive,但服务端关闭连接后,客户端可能未及时清理连接池中的失效连接
  • 数据库/Redis 客户端若配置了过短的 timeout(如 connectTimeout=100ms),在网络抖动时大量新建连接并快速失败
  • gRPC 客户端若未配置合理的 keepalive 参数,在长连接空闲后被服务端断开,客户端重连时出现 burst

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

182

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1005

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

671

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

501

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

413

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

408

2024.04.07

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号