线上接口tp99突然升高如何排查?

news2025/3/11 2:16:44
  • 当线上接口的 TP99 突然升高时,意味着该接口在 99% 的情况下响应时间变长,这可能会严重影响系统的性能和用户体验。可以按照下面的步骤进行排查。
  • 这里我们先说明一下如何计算tp99:监控系统计算 TP99(第 99 百分位数的响应时间)
    • 排序法
      数据收集:监控系统会持续收集接口的响应时间数据,这些数据可以是每秒、每分钟或者其他时间间隔内的响应时间样本。
      排序:将收集到的一定时间窗口内(如一分钟、一小时等)的所有响应时间数据进行排序,从最小值到最大值排列。
      定位 TP99:计算数据总数的 99% 位置所对应的响应时间值。假设在一个小时内收集到了 1000 个响应时间数据点,那么第 990 个位置(1000×99% = 990)的数据值就是 TP99。如果数据点的数量不是整数,可以通过插值的方法来确定 TP99 的值。
    • 分桶法
      确定桶的范围和大小:将响应时间划分为多个连续的区间,即 “桶”。例如,以 0-100 毫秒、100-200 毫秒、200-300 毫秒等为桶,每个桶有一个固定的范围。
      数据分组:将收集到的响应时间数据分配到对应的桶中,统计每个桶内的数据数量。
      计算 TP99:从最小的桶开始,依次累加每个桶内的数据数量,直到累加的数量达到或超过总数据量的 99%。此时,当前桶的上限值或者通过在当前桶内进行进一步计算得到的值就是 TP99。

整体分析思路为:先整体后局部。先看整体服务CPU、内存等使用情况;再观察接口流量、调用链路。

1. 确认问题范围

  • 监控数据收集:查看接口的监控数据,包括响应时间、吞吐量、错误率等指标的历史数据,确认 TP99 升高是个别接口还是多个接口的普遍问题
  • 业务流量分析:检查业务流量是否有异常波动,例如是否有突发的高并发请求、爬虫攻击等。

2. 应用程序层面排查

  • 代码审查
    • 近期代码变更:查看最近是否有代码部署到线上环境,尤其是与该接口相关的代码。检查新代码中是否存在性能问题,例如死循环、大量的数据库查询、复杂的计算逻辑等。
    • 日志分析:查看应用程序的日志,查找是否有异常信息,如错误堆栈、警告信息等。日志中可能会记录一些导致接口响应时间变长的关键信息。
  • 资源使用情况
    • CPU 使用率:检查应用程序所在服务器的 CPU 使用率是否过高。如果 CPU 使用率接近 100%,可能是由于代码中存在大量的计算密集型任务或者死循环导致的。
    • 内存使用情况:查看应用程序的内存使用情况,是否存在内存泄漏的问题。内存泄漏会导致应用程序的内存占用不断增加,最终影响系统的性能。
    • 线程池状态:检查应用程序的线程池配置和状态,是否存在线程池满、线程阻塞等问题。

3. 数据库层面排查

  • 慢查询分析
    • 数据库日志:查看数据库的慢查询日志,找出执行时间较长的 SQL 语句。可以通过优化这些 SQL 语句,例如添加索引、优化查询条件等,来提高数据库的查询性能。
    • 数据库连接池:检查数据库连接池的配置和状态,是否存在连接池满、连接泄漏等问题。
  • 数据库性能指标
    • CPU 使用率:检查数据库服务器的 CPU 使用率是否过高。
    • 磁盘 I/O:查看数据库服务器的磁盘 I/O 情况,是否存在磁盘读写瓶颈。
    • 内存使用情况:检查数据库服务器的内存使用情况,是否存在内存不足的问题。

4. 网络层面排查

  • 网络延迟
    • Ping 命令:使用 ping 命令检查应用程序服务器和数据库服务器之间的网络延迟是否正常。
    • Traceroute 命令:使用 traceroute 命令查看数据包从应用程序服务器到数据库服务器的路由路径,检查是否存在网络拥塞或者丢包的情况。
  • 网络带宽:检查应用程序服务器和数据库服务器的网络带宽使用情况,是否存在带宽不足的问题。

5. 中间件层面排查

  • 负载均衡器:检查负载均衡器的配置和状态,是否存在负载不均衡、转发错误等问题。
  • 缓存系统:如果接口使用了缓存系统,检查缓存系统的性能和命中率,是否存在缓存穿透、缓存雪崩等问题。

6. 压测和复现问题

  • 模拟高并发:在测试环境中模拟高并发场景,复现 TP99 升高的问题。通过压测工具,如 Apache JMeter、Gatling 等,对接口进行压力测试,观察接口的性能表现。
  • 逐步排查:在压测过程中,逐步排除可能的因素,例如关闭某些功能模块、调整配置参数等,找出导致 TP99 升高的具体原因。

补充:线上接口监控tp抖动,有尖刺如何排查?

  • 先看接口的监控尖刺对应的机器监控,如果偶发在某几台机器,那可能是gc导致,具体原因需要看对应机器的监控数据。如果发生在某个机房,可能是网络原因导致。

  • 如果通过机器看不到特殊信息,那么就需要分析调用链路。是否存在数据库慢、缓存失效、rpc服务耗时抖动等问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot优雅关机,监听关机事件,docker配置

Spring Boot 提供了多种方法来实现优雅停机(Graceful Shutdown),这意味着在关闭应用程序之前,它会等待当前正在处理的请求完成,并且不再接受新的请求。 一、优雅停机的基本概念 优雅停机的主要步骤如下: …

在【k8s】中部署Jenkins的实践指南

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Jenkins简介 2、k8s简介 3、什么在…

Unity DOTS从入门到精通之 C# Job System

文章目录 前言安装 DOTS 包C# 任务系统Mono 环境DOTS 环境运行作业NativeContainer 前言 作为 DOTS 教程,我们将创建一个旋转立方体的简单程序,并将传统的 Unity 设计转换为 DOTS 设计。 Unity 2022.3.52f1Entities 1.3.10 安装 DOTS 包 要安装 DOTS…

【Godot4.4】浅尝Godot中的MVC

概述 基于一个Unity的视频。学习了一下基本的MVC概念,并尝试在Godot中实现了一下。 原始的MVC: Godot中的MVC: Model、View和Controller各自应该实现的功能如下: Model: 属性(数据字段)数据存取方法数据更新信号 View: 控…

Elasticsearch为索引设置自动时间戳,ES自动时间戳

文章目录 0、思路1、配置 ingest pipeline2、在索引映射中启用_source字段的时间戳3、使用 index template 全局设置时间戳4、写入测试数据5、验证结果6、总结 在使用 Elasticsearch 进行数据存储和检索时,时间戳字段是一个非常重要的组成部分。它可以帮助我们追踪数…

计算机网络:计算机网络的组成和功能

计算机网络的组成: 计算机网络的工作方式: 计算机网络的逻辑功能; 总结: 计算机网络的功能: 1.数据通信 2.资源共享 3.分布式处理:计算机网络的分布式处理是指将计算任务分散到网络中的多个节点(计算机或设备&…

FPGA设计时序约束用法大全保姆级说明

目录 一、序言 二、时序约束概览 2.1 约束五大类 2.2 约束功能简述 2.3 跨时钟域约束 三、时序约束规范 3.1 时序约束顺序 3.2 约束的优先级 四、约束示例 4.1 设计代码 4.2 时序结果 4.2.1 create_clock 4.2.2 create_generated_clock 4.2.3 Rename_Auto-Derive…

云服务运维智能时代:阿里云操作系统控制台

阿里云操作系统控制台 引言需求介绍操作系统使用实例获得的帮助与提升建议 引言 阿里云操作系统控制台是一款创新型云服务器运维工具,专为简化用户的运维工作而设计。它采用智能化和可视化的方式,让运维变得更加高效、直观。借助AI技术,控制…

硬件学习笔记--48 磁保持继电器相关基础知识介绍

目录 1.磁保持继电器工作原理 2.磁保持继电器内部结构及组成部分 3.磁保持继电器主要参数 4.总结 1.磁保持继电器工作原理 磁保持继电器利用永磁体的磁场和线圈通电产生的磁场相互作用,实现触点的切换。其特点在于线圈断电后,触点状态仍能保持&#…

简记_硬件系统设计之需求分析要点

目录 一、 功能需求 二、 整体性能需求 三、 用户接口需求 四、 功耗需求 五、 成本需求 六、 IP和NEMA防护等级需求 七、 认证需求 功能需求 供电方式及防护 供电方式:市电供电、外置直流稳压电源供电、电池供电、PoE(Power Over Ether…

ubuntu 20.04下ZEDmini安装使用

提前安装好显卡驱动和cuda,如果没有安装可以参考我的这两篇文章进行安装: ubuntu20.04配置YOLOV5(非虚拟机)_ubuntu20.04安装yolov5-CSDN博客 ubuntu20.04安装显卡驱动及问题总结_乌班图里怎么备份显卡驱动-CSDN博客 还需要提前…

tauri-plugin-shell插件将_blank的a标签用浏览器打开了,,,解决办法

不要使用这个插件,这个插件默认会将网页中a标签为_blank的使用默认浏览器打开,但是这种做法在我的程序里不是很友好,我需要自定义这种行为,当我点击我自己的链接的时候,使用默认浏览器打开,当点击别的链接的…

C++ 继承(2)

Hello!!大家早上中午晚上好!!今天收尾继承剩余部分内容!! 一、友元不能继承 基类的友元函数不能被子类继承,也就是基类的友元函数访问不了子类的私有或保护成员! 1.1解决方法在子…

解决:Word 保存文档失败,重启电脑后,Word 在试图打开文件时遇到错误

杀千刀的微软,设计的 Word 是个几把,用 LaTex 写完公式,然后保存,卡的飞起 我看文档卡了很久,就关闭文档,然后 TMD 脑抽了重启电脑 重启之后,文档打不开了,显示 杀千刀的&#xff…

基于Asp.net的零食购物商城网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

ESP8266UDP透传

1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 响应 : OK 2. PC 连⼊入 ESP8266 softAP 就是连接wifi 3.查询ESP8266设备的IP地址 ATCIFSR 响应: CIFSR: APIP, "192.168.4.1" CIFSR: APMAC, "1a: fe: 34: a5:8d: c6" CIFSR: STAIP, "192.…

UE5从入门到精通之如何创建自定义插件

前言 Unreal 的Plugins插件系统中有很多的插件供大家使用,包括官方的和第三方的,这些插件不仅能帮我我们实现特定功能,还能够提升我们的工作效率。 所以我们今天就来自己创建一个自定义插件,如果我们想实现什么特定的功能,我们也可以发布到商店供大家使用了。 创建插件 …

基于python大数据的招聘数据可视化与推荐系统

博主介绍:资深开发工程师,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有…

olmOCR:高效精准的 PDF 文本提取工具

在日常的工作和学习中,是否经常被 PDF 文本提取问题困扰?例如: 想从学术论文 PDF 中提取关键信息,却发现传统 OCR 工具识别不准确或文本格式混乱?需要快速提取商务合同 PDF 中的条款内容,却因工具不给力而…

Spring Boot使用JDBC /JPA访问达梦数据库

Spring Boot 是一个广泛使用的 Java 框架,用于快速构建基于 Spring 的应用程序。对于达梦数据库(DMDB)的支持,Spring Boot 本身并没有直接内置对达梦数据库的集成,但你可以通过一些配置和依赖来支持达梦数据库。 以下…