【产线故障】线上接口请求过慢如何排查?

文章目录

  • 前言
  • 一、内存使用过高导致CPU满载
    • 案例代码
    • 分析思路
  • 二、出现了类似死循环导致cpu负载
    • 案例代码
    • 分析思路
  • 三、死锁
    • 案例代码
    • 分析思路

前言

首先线上接口变慢,原因可能有很多,有可能是网络,有可能是慢 SQL,有可能是服务本身出现了问题,还有可能是机器达到了性能瓶颈。而机器性能瓶颈也又可以分为磁盘 IO 瓶颈、CPU 性能瓶颈、网卡瓶颈等等。

线上接口过慢,排除网络的原因之外无非有以下三点:

  1. 内存使用过高,频繁gc导致cpu占满
  2. 内存使用不高,出现了类似死循环场景
  3. 死锁
    一般在遇到问题的时候先使用top -c 命令查看cpu是否占满,然后再使用free -m查看内存使用率,初步
    判断是上面问题的哪一种,然后再针对这一种问题深入排查。下面来模拟一下以上几种情况:

一、内存使用过高导致CPU满载

案例代码

public class FullGc {public static void main(String[] args) {List<Object> list = new ArrayList<>();for (int i = 0; i < 10000000; i++) {String str = "";for (int j = 0; j < 1000; j++) {str += UUID.randomUUID().toString();}list.add(str);System.out.println(str);}}}

分析思路

  1. 查看负载高的cpu进程id: top -c
    在这里插入图片描述

    这时发现进程id为70719的cpu负载较高

  2. 查看该进程id的线程id: top -Hp 70719
    在这里插入图片描述

    这时发现线程id为70720的线程负载较高

  3. 将十进制的线程id转换为16进制小写的:printf “%x\n” 69476
    在这里插入图片描述

    发现16进制的线程id为11440

  4. 查看该线程的运行的情况:jstack 70719|grep 11440 -A60
    在这里插入图片描述

    发现是FullGc这个类的第14行有问题

  5. 通过jamp工具导出内存日志,分析堆的情况:jmap -dump:format=b,file=dump.dat 70719
    在这里插入图片描述

  6. 使用MAT工具分析堆的情况
    在这里插入图片描述

发现了以上大量的字符串

二、出现了类似死循环导致cpu负载

案例代码

public class Cpu {public static void main(String[] args) {while (true) {}}
}

分析思路

基本上跟内存使用率过高的前几步差不多的,依然是以下几步:

  1. top命令查看当前CPU消耗过高的进程,得到进程id
  2. 根据进程id得到占比较高的线程id
  3. 将线程id转换为十六进制
  4. 根据进程编号用jstack命令查看线程id,可以得到线程的具体堆栈信息
    在这里插入图片描述

从图中可以看出Cpu这个类的第三行有问题

三、死锁

案例代码

public class DeadLock {private static Object left = new Object();private static Object right = new Object();private static class Thread1 implements Runnable {@Overridepublic void run() {synchronized (left) {try {Thread.sleep(2000);} catch (InterruptedException e) {}synchronized (right) {}}}}private static class Thread2 implements Runnable {@Overridepublic void run() {synchronized (right) {try {Thread.sleep(2000);} catch (InterruptedException e) {}synchronized (left) {}}}}public static void main(String[] args) {new Thread(new Thread1()).start();new Thread(new Thread2()).start();}
}

分析思路

这个就简单了

  1. 先使用jps查看进程id,如图:
    在这里插入图片描述
  2. 找出死锁的线程:jstack [进程id]
    在这里插入图片描述
    jvm会自动搜索出死锁的堆栈信息

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

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

相关文章

【Linux】- 一文秒懂shell编程

shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…

Mysql性能调优——1.深入理解Mysql索引数据结构和算法

本系列所说的Mysql性能调优&#xff0c;主要是针对开发者在实际环境中的sql调优&#xff0c;代码层面上的优化。不涉及到mysql底层代码的调优。 我们知道&#xff0c;一个mysql数据表&#xff0c;数据量小的时候&#xff0c;可能简单的查询耗时不会太久&#xff0c;性能也可以…

供配电技术

最近&#xff0c;在上一门关于供配电技术的课程&#xff0c;虽说与自动化的关系并不是十分大&#xff0c;但对于扩展知识面还是有很大用处的&#xff0c;不至于与其他人交谈此方面的相关知识的时候&#xff0c;一头雾水。

百度智能云千帆大模型平台2.0来了!从大模型到生产力落地的怪兽级平台!!

目录 前言 最佳算力效能为企业降低门槛 最多大模型&#xff0c;最多数据集为企业保驾护航 企业级安全对于企业来说是硬性要求 前言 普通人或许感知不明显&#xff0c;但是对于企业而言&#xff0c;身处AI时代&#xff0c;是否选择投资大模型&#xff0c;是否拥抱人工智能…

AlmaLinux 经济收益增加,红帽 RHEL 源码限制不成威胁

导读红帽在两个月前发布公告表示&#xff0c;将限制对 Red Hat Enterprise Linux (RHEL) 源代码的访问&#xff0c;未来 CentOS Stream 将成为公共 RHEL 相关源代码发布的唯一仓库。对于这一决策&#xff0c;AlmaLinux OS Foundation 主席 Benny Vasquez 则向 SiliconANGLE 表示…

【MyBatis篇】MyBatis框架基础知识笔记

目录 ORM思想&#xff08;对象关系映射思想&#xff09; 初识MyBatis 什么是MyBatis呢&#xff1f; JDBC VS MyBatis代码 获取数据库连接对比 对表格查询操作&#xff1a; JDBC弊端 MyBatis&#xff0c;JDBC对比 MyBatis进一步介绍以及本质分析 JDBC编程的劣势&…

五大类注解和方法注解详解

五大类注解为Controller&#xff0c;Service&#xff0c;Repository&#xff0c;Configuration&#xff0c;Component,方法注解为Bean。 需要注意的是&#xff1a;Bean注解必须要在类注解修饰的类内才能正常使用。 一、与配置文件的关系 在spring原生项目中 如果你使用的spri…

基于Hata模型的BPSK调制信号小区覆盖模拟matlab完整程序分享

基于Hata信道模型的BPSK调制信号小区覆盖模拟matlab仿真&#xff0c;对比VoIP, Live Video,FTP/Email 完整程序&#xff1a; clc; clear; close all; warning off; addpath(genpath(pwd)); % Random bits are generated here. bits randi([0, 1], [50,1]); M 2; t 1:1:50; …

Json“牵手”唯品会商品详情数据方法,唯品会商品详情API接口,唯品会API申请指南

唯品会是中国最大的会员制特卖电商平台之一&#xff0c;于2008年创立&#xff0c;唯品会主营业务为互联网在线销售品牌折扣商品&#xff0c;涵盖名品服饰鞋包、美妆、母婴、居家等各大品类2。唯品会采取供应链直采模式&#xff0c;与全球3000多家品牌及供应商合作&#xff0c;直…

TSINGSEE青犀视频AI分析/边缘计算/AI算法·安全帽检测功能——多场景高效运用

安全帽检测算法主要是对人员安全和事故预防的需要。在许多工业领域和施工现场&#xff0c;佩戴安全帽是一种重要的安全措施&#xff0c;可以减少头部受伤的风险。然而&#xff0c;由于工地人员数量众多且繁忙&#xff0c;人工监控难以有效覆盖所有区域&#xff0c;因此旭帆科技…

Ubuntu 升级cuda版本与切换

下载cuda版本 进&#xff1a;CUDA Toolkit 12.2 Downloads | NVIDIA Developer wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.runsudo sh ./cuda_12.2.0_535.54.03_linux.run --toolkit --silent --overrid…

Shell命令操作Linux文件系统

Shell命令操作Linux文件系统 文件夹介绍 文件夹常规命令 文件夹权限控制⭐ 文件类型和权限 修改文件权限 移动、复制、删除文件夹 文件夹介绍 Linux文件系统是计算机操作系统中的一个关键组成部分&#xff0c;它用于管理和组织计算机上的数据和信息。先到根目录&#xf…

并发容器11

一 JDK 提供的并发容器总结 JDK 提供的这些容器大部分在 java.util.concurrent 包中。 ConcurrentHashMap: 线程安全的 HashMap CopyOnWriteArrayList: 线程安全的 List&#xff0c;在读多写少的场合性能非常好&#xff0c;远远好于 Vector. ConcurrentLinkedQueue: 高效的并…

音频应用编程

目录 ALSA 概述alsa-lib 简介sound 设备节点alsa-lib 移植编写一个简单地alsa-lib 应用程序一些基本概念打开PCM 设备设置硬件参数读/写数据示例代码之PCM 播放示例代码值PCM 录音 使用异步方式PCM 播放示例-异步方式PCM 录音示例-异步方式 使用poll()函数使用poll I/O 多路复用…

W5500-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试&#xff0c;那么本章我们进行W5500_EVB_PICO Ping的测试。 什么是PING&#xff1f; Ping &#xff08;Packet Internet Groper&#xff09;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序 。Ping是…

phpstudy本地快速搭建网站,并外网访问【无公网IP】

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

聊聊Kafka的生产者消费者确认机制

一、生产者确认机制 消息从生产者客户端发送至broker服务端topic&#xff0c;需要ack确认。acks与min.insync.replicas是两个配置参数.其中acks是producer的配置参数&#xff0c;min.insync.replicas是Broker端的配置参数&#xff0c;这两个参数对于生产者不丢失数据起到了很大…

C# | DBSCAN聚类算法实现 —— 对直角坐标系中临近点的点进行聚类

C# | DBSCAN聚类算法实现 聚类算法是一种常见的数据分析技术&#xff0c;用于将相似的数据对象归类到同一组或簇中。其中&#xff0c;DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;是一种基于密度的聚类算法&#xff0c;能够有效…

在R中安装TensorFlow、TensorFlow_Probability、numpy(R与Python系列第二篇)

目录 前言&#xff1a; 1-安装tensorflow库 Step1: 下载R包tensorflow Step2&#xff1a;安装TensorFlow库 Step3&#xff1a;导入R中 2-安装tensorflow_probability库 Step1&#xff1a;下载R包&#xff1a;tfprobability Step2&#xff1a;安装TensorFlow Probability …

火热的低代码,是时候系统的来学一学了!

一、前言 低代码诞生至今&#xff0c;大家各抒己见&#xff0c;也不乏有针锋相对的意思。古时的治国之术有百家争鸣&#xff0c;如今的低代码也有“诸子论道”&#xff0c;这本质上是一件有助于推动低代码发展的事情。 业内的朋友们一定知道&#xff0c;关于低代码的热点不止发…