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

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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex