应用发版期间服务响应超时

2024-03-07 00:32

本文主要是介绍应用发版期间服务响应超时,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

描述

负责的应用正式环境发版期间,下游应用调用服务告警,查看监控发现这个时间段内偶发下游调用查询接口超时,服务耗时波动如下图:

image

并且当应用的所有节点服务发布完成后,偶发的接口超时告警自动恢复,因此盲猜是服务发布时的抖动导致该问题,于是有以下几个猜测:

  1. 服务注册发现流程问题:节点下线后未及时从注册中心剔除下线节点,导致下游调用到了下线节点
  2. 服务注册发现流程问题:节点上线后先在注册中心注册节点,再开放服务端口,导致中间的时间差服务无响应
  3. 资源初始化问题:节点上线后资源未初始化完成,下游调用服务后资源首次初始化耗时长导致服务超时

排查

每个请求都对应一个唯一的traceId做链路追踪,通过下游服务调用超时错误日志中对应的traceId,找到该请求路由到的具体容器节点后,查看日志发现,应用于2021-07-16 11:41:42启动完成,而超时请求于2021-07-16 11:41:47路由到该节点,也就是节点先启动注册完成后,再出现服务响应超时的情况,因此猜想1排除。

接着排查该节点启动后的接口响应耗时情况,于是查看日志数据,前10条记录。该几个请求链路均为查询接口,请求的流程图如下:

image

由日志可得,该节点应用启动完成后,前3次服务响应耗时正常,第4-7次的响应耗时明显过长,但从第8次起响应耗时又恢复正常。于是通过以上几个链路的traceId查看每个请求的调用链路情况:

  1. 第1次请求直接命中tair缓存,响应耗时正常。
  2. 第2次请求直接命中堆内缓存,响应耗时正常。
  3. 第3次请求直接命中堆内缓存,响应耗时正常。
  4. 第4次请求缓存命中失败,请求数据库查询,数据库执行耗时超长。
  5. 第5次请求缓存命中失败,请求数据库查询,数据库执行耗时超长。
  6. 第6次请求缓存命中失败,请求数据库查询,数据库执行耗时超长。
  7. 第7次请求缓存命中失败,请求数据库查询,数据库执行耗时超长。

很明显超时的原因是因为缓存命中失败后请求数据库查询而导致,但排查后续中的链路即使出现查询数据库也未出现服务响应耗时过长的情况,因此怀疑是数据库连接未初始化的问题:应用刚启动完成后,请求查询数据库前需要额外请求配置中心初始化相关配置并且创建数据库连接,导致的耗时超长的情况。

咨询同事后得知应用在已经配置开启了数据库连接预热,于是去查看预热配置说明:是否预热最小连接数。然后再查看连接池配置,发现当前的连接池配置的最小连接数为0。也就是说应用启动时预热了个寂寞,导致应用启动后数据库连接池数量为0,当请求到该应用后前几次请求均需要创建新数据库连接因而耗时较长,而后续请求直接复用连接池连接因此后续请求处理耗时恢复正常。

解决

配置中心平台修改应用的连接池配置,最小连接数从0修改为5,保证应用在启动完成后数据库连接池已经初始化完成。等待下次应用迭代发布时监控新发布应用的请求耗时情况。

这篇关于应用发版期间服务响应超时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/781873

相关文章

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编