接口响应过慢的原因排查,希望对你有用

 最近一次的项目体验,手机用户在训练完成之后,会有服务器超时的提示,在用户量大的时候,每晚的7-9点时间段发生的尤为频繁,所以作了一些的排查。

排查的顺序乃是这样的:

  1. 确定是哪个接口存在性能问题

  2. 确定这个接口的内部逻辑是怎样的,做了哪些事情

  3. 分析接口存在性能问题的根本原因

  4. 寻找确立优化方案

  5. 回归验证方案效果

首先哪个接口的话,代码当中马上就找到了,立刻开始确定里面的逻辑,这一下就发现了问题了,里面的逻辑随着业务的增加,这里面变得越来越臃肿,包括对多张表的查询、几张表的更新与新增,这一下就看到了,可是里面的一些逻辑实在太难拆出来了,上下的连接性太严重,需要前面的数据,后面的业务才能继续的走下去。没办法,就看看还有什么其他的地方需要优化的。

1.在sql日志的打印中,喜不自胜的看到了一连串了slow 慢sql语句,这下子可以从这些sql语句上着手的,这是肯定要优化的,都是一些执行时间大于1s的,更有甚者到达了5-6s。

 最严重的,我发现这是一条update语句,竟然不是select查询语句,后来查了一下的资料,发现可能是因为事务的原因,线程被阻塞,锁住了要查询的表,导致sql语句过慢,接口也就相对应的慢起来,发现这个update的语句,会对播放记录play_total多次的进行+1的操作,每次当前视频video被跳一次,它的热度就作+1处理,导致这个字段被更新的过于频繁,这张表被锁死了,其他对video的查询操作进行不下去,整个接口的响应被拖慢了。

解决方案:

将这个play_total字段单独拿出来做张副表,专门对这个字段作更新+1的操作,这样在频繁也不会,对其他的查询操作有影响了,尤其是对video的影响

PS:其实还有更好的方法,对于这种频繁操作,但是却不太重要的字段,可以直接存在缓存当中,在服务器启动时,做一次查询操作,后面所有的更新操作直接在缓存里进行,这样也就不会对数据库有任何的影响了。隔段时间作同步操作,将缓存的数据同步到数据库中,这个涉及到数据的同步,可能会增加复杂度,使用的话,慎重。

2.在作了这些操作之后,当晚发布后,第二天再次到达晚上用户量较多时,发现情况稍有好转,但是问题仍旧存在,有一些其他接口的响应时长在30s以上,用户还是时常会报服务器超时,于是再次排查问题所在,又再次发现了,问题接口里的逻辑写的有些问题,很多的for循环里嵌套了一些其他的一些实现类,然后里面包含对数据库的操作,这样也就相当于循环多少次,会建立多少次的连接,严重拖慢了接口的响应。

 于是作了一些的操作,在for循环外面将所有数据查询出来,sql里面用in  foreach标签,这2个sql作了联表查询, 

3.还有最后一个问题就是,后台会经常报“断开的管道”这个异常,实在是不经常见到的错误,所以在网上搜了一些的答案。

 在这里面的文章里找到一些有用的内容,原来是因为接口响应过慢,导致前端那边设置的超时时间到了,直接主动切断了与后端的连接,但是后端还在查数据,查完以后想返给前端,发现管道已经断掉了,就只好报这个错误的  

  后来又找了一些其他的资料,终于找到了解决方案,

 解决方法

1、调大防火墙的连接切断时长

这是一个临时解决方法,比如将防火墙的连接超时时间调整为8小时,这样可以尽量避免空闲连接的切断,但无法完全避免,因为无法预计连接会被空闲多久,如果你的系统不是总有人访问的话,那么连接迟早会因为空闲而被切断,导致一些不可预计的问题,而调大超时时间只是缓解而已

2、tcp keepalive功能

tcp的keepalive,其实就是用来保持tcp连接的,其原理简单说就是如果一个TCP连接在指定的时间内没有任何活动,会发送一个探测包到连接的对端,检测连接的对端是否仍然存在,如果对端一定时间内仍没有对探测的响应,会再次发送探测包,发送几次后,仍然没有响应,就认为连接已经失效,关闭本地连接。
tcp keepalive并不是默认开启的,在开发程序时可以设置tcp keepalive为true,这样tcp连接在一定时间内没有任何数据报文传输则启动探测,这个时间一般是操作系统规定,Linux系统中可以通过设置net.ipv4.tcp_keepalive_time来修改,默认是7200秒,即2小时。当然在编程时也可以设置这个时间用于当前socket,但是Java的Socket API中好像只有设置keepalive=true,并没法设置tcp_keepalive_time
当设置了tcp keepalive之后,只要tcp探测包发送的时间小于防火墙的连接超时时间,防火墙就会检查到连接中仍然有数据传输,就不会断开这个连接。

使用JDBC创建的数据库tcp连接是没有设置keepalive的,这点可以通过Linux的netstat或ss命令在数据库客户端(即应用端)验证
使用命令netstat -ano 或 ss -ano,其中参数o都是显示timer计时器,timer计时器在连接建立状态下可以对连接保活计时
netstat命令对没有开启keepalive的tcp连接显示为:off (0.00/0/0)
ss命令对没有keepalive的tcp连接,不会显示timer计时器

3、程序不定时执行查询

以上几种方法要么是利用tcp连接keepalive特性,要么是采用数据库端的空闲连接检测,我们的程序中也可以主动做这种心跳检测

Druid数据库连接池从1.0.28开始,添加了druid.keepAlive属性,默认关闭
打开druid.keepAlive之后,当连接池空闲时,池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作,即执行druid.validationQuery指定的查询SQL,一般为select * from dual,只要minEvictableIdleTimeMillis设置的小于防火墙切断连接时间,就可以保证当连接空闲时自动做保活检测,不会被防火墙切断

这就是整个问题的解决,希望可以帮到大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23160.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建类ChatGPT产品的经典知识数据库的原理与路径

构建经典知识数据库是类ChatGPT产品发展不可或缺的关键阶段。这一阶段的重要性在于为类ChatGPT产品打下基础,为自然语言大模型提供坚实可靠的文献资源,成为其最终的依据。 经典文献知识数据库与人工智能的结合将发挥独特的重要作用。实际上,…

当以ChatGPT为代表的AI进入教育,会碰撞出怎样的火花?

ChatGPT是当前的社会热点,街头巷尾、各行各业都在讨论它,迅速引起了全世界的关注。目前,在国外,ChatGPT已经开始进入学校。当以ChatGPT为代表的AI进入教育,会碰撞出怎样的火花? INSA校友卢宇,这…

还在转发杨超越?参加这场图表大show,你就能成为锦鲤本鲤!

Biu~ 暑假快要过去了 马上就要开学了 惊不惊喜? 意不意外? 听到这个消息, 在校学生 啊,我的空调、WiFi、西瓜 高校教师 啊,我的大好河山!(世界那么大... 职场白领 我就静静地听着你们诉(哀&…

ChartGPT有点意思,还能这么玩

ChatGPT是OpenAl开发的一种语言生成系统,具有较高的自然语言理解和对话管理能力。 所以它常用于对话机器人,比如说某爱、某度等,同时也可用于自动回复、问答系统等,对搜索引擎的智能化都带来不少新的挑战和方向。 然而目前ChatGP…

快速生成一份ppt:ChatGPT+MindShow

一、ChatGPT 需要用到目前全宇宙最火的chatgpt,输入格式一定要markdown格式输出 帮我做一份《xxxx》的ppt,帮我写一份包含6个子标题的大纲,每个子标题下尽量写4-5条内容,内容尽量详实,如果有例子更好。最后用markdown…

大厂被裁,我也曾迷茫过

大家好,我是徐公,6 年大厂程序员经验。 最近收到好几位粉丝的私信。问我说,徐公,我去年年底被裁,到现在还没找到工作,挺焦虑的,你这边有没有什么机会,可以帮忙内推?或者…

高通面试01_2023.5.16

1. 64QAM与16QAM速率对比 64 2^6,6bit信息/符号; 16 2^4,4bit信息/符号; 6/4 1.5倍数 2. 人工智能热点关注(ChatGPT) GPT “生成性预先训练转换器”(generative pretrained transformer) 百科&…

某平台百万阅读博主,去面试阿里P7,遭面试官狂喷:根本不懂技术,闭关60天,吊打曾经面试官,史上最强

某平台百万阅读博主,去面试阿里P7,遭面试官狂喷:根本不懂技术 一气之下回家硬肝60天,再战阿里又遇到当初面试官!轻松拿下阿里P7后说出实情,竟只是凭借这个文档! 首先声明: 本书覆盖了近3年程序员面试笔试中超过98%Java高频知识点当你细细品读完本书后,各类企业的of…

Hadoop常见面试题

目录 什么是hdfs 原理 包含哪些部分 hdfs 的读取过程 hdfs 的写过程 NN 和 2NN 工作机制 (元数据持久化机制) (一)第一阶段: NameNode 启动 (二)第二阶段: Secondary NameNode 工作 datanode的工作机制 小文件处理方案 yarn 的运行原理 任务提交…

重磅消息!微软将把聊天机器人技术植入Office办公软件

微软(Microsoft)是一家美国跨国科技企业,1975年4月4日创立。2021财年微软营收为1681亿美元, 净利润为613亿美元,公司总部设立在华盛顿州雷德蒙德(Redmond,邻近西雅图),以…

刚刚,谷歌翻车了。。。

大家好,我是微笑。 最近微软出品的 ChatGPT 确实引起很大的关注,这不,谷歌就紧跟发布了谷歌版 ChatGPT - Bard,结果很。。。 源自:机器之心 原文:https://mp.weixin.qq.com/s/1mkAlJbtYCmQcz_mV9cdoA 如今的…

LangChain:基于ChatGPT对话私有数据

一、架构图: 二、思路: 通过embbeding获得文本的语义,通过向量数据库获得近似记录,通过chatGPT得到问答内容将文件拆分并embbeding后存入向量数据库将用户问题embbeding后从向量数据库中找近似的文档数据作为prompt上下文 三、核…

【ChatGPT】万字长文揭秘 GPT 背后:为何“大模型” 就一下子成为了引领人工智能 AI2.0时代热门技术?

GPT (Generative Pre-trained Transformer) ,生成式预训练Transformer: 是一种基于深度学习的自然语言处理模型,GPT 由 OpenAI 开发。 GPT 是一种基于 Transformer 模型的语言模型,可以通过大量的文本数据进行训练,从而学习到语言的规律和模式,进而生成自然流畅的语言文本…

网站接入QQ登录功能的实现

来源 | https://github.com/Dream4ever/Knowledge-Base/issues/76 说明 本文中所说的QQ登录功能,是采用官方的OAuth2.0来实现的,这样有更多的自主权。另一种较为简单的js-SDK开发方式,虽然非常简便,但自主性不够,所以没…

Android QQ 登录接入详细介绍

/ 今日科技快讯 / 近日,百度地图发布2022春节出行大数据。迁徙大数据显示,2022年春运迁徙规模较去年农历同期有明显上升。春节期间全国人口迁徙规模日均值为去年农历同期的近两倍。春节前的迁徙规模峰值出现在1月29日(腊月廿七&#xff0…

工具使用-QQ/TIM(1)QQ/TIM客户端聊天窗口输入/自动变成表情 - 解决方案

问题: 我们在使用QQ/TIM客户端(电脑端)时,输入英文字符/时,会自动变成表情,且无法取消,无法避免。如下图所示: 解决: 打开QQ/TIM客户端,并打开一个聊天窗口。在聊天窗口中点击表情图…

chatgpt赋能python:Python软件图标的SEO

Python软件图标的SEO 介绍 Python是一种高级编程语言,具有易读性、可维护性和可扩展性等优点,因此在许多应用程序中广泛使用。Python软件的图标是这些应用程序中一个非常重要的视觉元素。图标的质量和吸引力可以决定用户下载和使用该应用程序的意愿。因…

漫谈高数

漫谈高数 (一) 泰勒级数的物理意义 高等数学干吗要研究级数问题? 是为了把简单的问题弄复杂来表明自己的高深? No,是为了把各种简单的问题/复杂的问题,他们的求解过程用一种通用的方法来表示。 提一个问题,99*99等于多少? 相信我们不会傻到…

《高等数学A》课堂笔记——高分必过

《高等数学》上下学期的课堂笔记 ——郑州大学 文章目录 一、函数与极限1.1 映射与函数1.2 数列的极限1.3 函数的极限1.4 无穷小与无穷大1.5 极限运算法则1.6 极限存在准则及两个重要极限1.7 无穷小的比较1.8 函数的连续性与间断性问题…

高等数学【合集2】

文章目录 积分计算递推重点补充 积分计算 求导 ⇄ 积分 求导 \rightleftarrows 积分 求导⇄积分 求导积分 ( t ) ′ 1 \large (t)1 (t)′1 ∫ t d t 1 2 t 2 c \large\int tdt\frac{1}{2}t^2c ∫tdt21​t2c ( 1 x ) ′ − 1 x 2 \large(\frac{1}{x})-\frac{1}{x^2} (x1​)…