当前位置: 首页 > news >正文

通过QPS和并发数定位问题

QPS和并发数如图:
在这里插入图片描述

现象:接口大量504.

一、现象分析

  1. 请求堆积与响应延迟
    • 每秒到达300个请求,但系统每秒只能处理16个,意味着 每秒积压284个请求。
    • 请求处理时间被迫延长(假设无超时):
      平均响应时间 = 并发数 / QPS = 300 / 16 ≈ 18.75秒
      用户可能遇到超时(HTTP 504)或客户端主动取消请求。
  2. 资源耗尽
    • 线程池阻塞:若使用同步线程模型(如Tomcat默认配置),线程池会被占满,新请求进入等待队列,最终导致队列溢出(RejectedExecutionException)。
    • 数据库连接池耗尽:若每个请求依赖数据库操作,连接池会被占满,触发CannotGetJdbcConnectionException。
    • 内存溢出:积压的请求可能导致内存中对象堆积,频繁触发GC甚至OutOfMemoryError。
  3. 雪崩效应
    • 单个接口的阻塞可能扩散到整个应用,导致其他接口也无法正常响应。

二、根本原因排查方向

1. 代码性能瓶颈
  • 慢SQL:检查是否有未优化的查询(全表扫描、缺失索引)。
  • 同步阻塞操作:如同步调用外部API、文件IO、未使用缓存导致重复计算。
  • 锁竞争:不合理的synchronized或ReentrantLock使用导致线程阻塞。
  • 低效算法:时间复杂度高的操作(如嵌套循环处理大数据量)。
2. 资源配置不足
  • 线程池容量不足:Tomcat默认线程池(如maxThreads=200)可能不足以处理300并发。
  • 数据库连接池过小:例如HikariCP默认maximumPoolSize=10,远低于并发需求。
  • JVM内存不足:堆内存过小导致频繁GC甚至OOM。
3. 外部依赖瓶颈
  • 依赖的第三方服务或中间件(如Redis、Kafka)性能不足,成为瓶颈。

根据接口查看代码,发现一个问题:
更新一个表的数据时,如果没有找到该数据,会进行全表扫描。
当时表数据量小,没问题。但是后面随着业务扩展,表数据大的时候,就会很慢。

http://www.xdnf.cn/news/419167.html

相关文章:

  • 网络体系结构(OSI,TCP/IP)
  • 3.4 数字特征
  • 关于网站提交搜索引擎
  • 【Cesium入门教程】第七课:Primitive图元
  • 算法备案部分咨询问题解答第三期
  • leetcode-hot-100 (滑动窗口)
  • Windows部署LatentSync唇形同步(字节跳动北京交通大学联合开源)
  • 【Redis 进阶】缓存
  • 3.3 阶数的作用
  • 基于机器学习的卫星钟差预测方法研究HPSO-BP
  • Java【10_1】用户注册登录(面向过程与面向对象)
  • Spring Boot配置文件
  • Vue2 elementUI 二次封装命令式表单弹框组件
  • InternVL3: 利用AI处理文本、图像、视频、OCR和数据分析
  • docker部署WeDataSphere开源大数据平台
  • 【人工智能】自然语言编程革命:腾讯云CodeBuddy实战5步搭建客户管理系统,效率飙升90%
  • 论软件设计模式及其应用
  • EXCEL Python 实现绘制柱状线型组合图和树状图(包含数据透视表)
  • 工程类论文查重困局破解:基于知识图谱的跨学科语义重构技术实证研究
  • java复习笔记-面向对象
  • 速卖通如何低成本测评,让店铺流量与销量双提升
  • MapReduce基本介绍
  • 原生小程序+springboot+vue医院医患纠纷管理系统的设计与开发(程序+论文+讲解+安装+售后)
  • 内存中的“BANK”
  • 125.在 Vue3 中使用 OpenLayers 实现通过 WebGLVector 的方式添加海量点
  • MapReduce打包运行
  • 基于大模型预测胸椎管狭窄诊疗全流程的研究报告
  • 基于开源AI大模型AI智能名片S2B2C商城小程序的零售结算技术创新研究——以京东AI与香港冯氏零售集团智能结算台为例
  • 深入理解 JVM:StackOverFlow、OOM 与 GC overhead limit exceeded 的本质剖析及 Stack 与 Heap 的差异
  • 逆强化学习IRL在医疗行为模式研究中的应用