性能瓶颈分析与调优

对于性能测试,很多时候压力并不能完全到达服务端,在客户端、网络连接端都有可能被阻塞,或者压测的某些特征符合CC和DDoS的行为,触发了防护策略导致压测结果达不到预期。

以下是各节点可能发生性能瓶颈的地方:

  1. 客户端阻塞:线程设置不合理,压测机配置跟不上;
  2. 网络连接端:宽带、最大连接数、新建连接数的限制;
  3. 服务器端:CPU、内存、磁盘IO、Network I/O;
  4. 中间件相关指标:线程池、连接池、GC等;
  5. 数据库相关指标:慢查SQL、命中率、锁、参数设置;
  6. 应用程序:算法、缓冲、缓存、同步或异步。

性能瓶颈分析与调优

性能瓶颈分析与调优

瓶颈排查处理方案:

瓶颈应对手段

CPU:

如果CPU User非常高,需要查看消耗在哪个进程,可以用top(linux)命令看出,接着用top –H –p 看哪个线程消耗资源高,如果是java应用,就可以用jstack看出此线程正在执行的堆栈,看资源消耗在哪个方法上,查看源代码就知道问题所在;

如果CPU Sys非常高,可以用strace(linux)看系统调用的资源消耗及时间;

如果CPU Wait非常高,考虑磁盘读写,可以通过减少日志输出、异步或换速度快的硬盘。

内存:

内存的问题主要看某个进程占用的内存是否非常大以及是否有大量的swap(虚拟内存交换)。

磁盘IO:

磁盘I/O一个最显著的指标是繁忙率,可以通过减少日志输出、异步或换速度快的硬盘。

网络IO:

网络I/O主要考虑传输内容大小,不能超过硬件网络传输的最大值70%,可以通过压缩、减少内容大小、在本地设置缓存以及分多次传输等。

内核参数:

注意运行参数不要超过内核参数而导致系统出现问题

JVM:

jvm主要分析GC/FULL GC是否频繁,以及垃圾回收的时间,可以用jstat命令来查看,对于每个代大小以及GC频繁,通过jmap将内存dump,再借助工具HeapAnalyzer来分析哪地方占用的内存较高以及是否有内存泄漏可能。

常见线程问题(jstack pid)

⚫ CPU 使用率不高但是响应时间很长

➢ 对进行线程 dump,检查是不是有线程卡在了 IO、数据库这些地方

➢ 检查是否有”Waiting on condition”,如果有则说明线程在等待某种条件来唤

醒。比如 sleep 时间,网络 IO,磁盘 IO

➢ 检查是否有线程死锁(线程死锁指的是两个线程互相持有对方的锁,无法释放)

⚫ CPU 的 us 使用率高,负载很高,响应很长

➢ 多次堆栈,检查是否有某个线程一直在执行同一个方法

线程池:

如果线程不够用,可以通过参数调整,增加线程;对于线程池中的线程设置比较大的情况,还是不够用可能的原因是:某个线程被阻塞来不及释放,可能在等锁、方法耗时较长、数据库等待时间很长等原因导致,需要进一步分析才能定位。

JDBC连接池:

连接池不够用的情况下,可以通过参数进行调整增加;但是对于数据库本身处理很慢的情况下,调整没有多大的效果,需要查看数据库方面以及因代码导致连接未释放的原因。

SQL:

慢SQL,可以通过查看执行计划看SQL慢在哪里来进一步优化。

Original: https://www.cnblogs.com/ngd-mzl/p/15711329.html
Author: 尼古丁·瘾
Title: 性能瓶颈分析与调优

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585227/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 更快的排序——归并排序!基于分而治之的对数复杂度的排序Merge Sort

    Merge Sort Algorithm The merge sort algorithm is defined recursively: If the list is of si…

    Linux 2023年6月13日
    096
  • Linux系统编程—信号捕捉

    前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 默认处理方式; 忽略; 捕捉。 信号的捕捉,说白了就是抓到一个信号后,执行我们指定的函数,或者执行我们指定的动作…

    Linux 2023年6月14日
    0123
  • QT:设置子窗口显示在父窗口的位置(绝对坐标)

    故事背景:最近需要在父窗体修改按钮上弹出二次确认框,之前要么使用 QDesktopWidget,要么使用QCursor,来设置弹窗位置,但是这两种方式不是很理想,就是想弹到相对父窗…

    Linux 2023年6月13日
    0107
  • 用shell抓取某考试试题

    一、背景 最近公司组织考信息安全,但考试机构没有整理出试题,只给了以下几个在线练习的链接,想着用博客整理下题库题型,奈何这个只能用拍照图片,然后用图片转文字的方式太慢,累死个人了,…

    Linux 2023年6月6日
    0105
  • Redis相关监控参数【转】

    1 慢查询 默认情况下命令若是执行时间超过10ms就会被记录到日志,slowlog只会记录其命令执行的时间,不包含io往返操作,也不记录单由网络延迟引起的响应慢。如果想修改慢命令的…

    Linux 2023年5月28日
    071
  • Question06-查询”李”姓老师的数量

    问题比较简单,一个单表查询就可以解决,这里就不过多地讲解 Original: https://www.cnblogs.com/OnlyOnYourself-lzw/p/165738…

    Linux 2023年6月7日
    087
  • [转]最值得拥有的免费Bootstrap后台管理模板

    Original: https://www.cnblogs.com/haowuji/p/7490519.htmlAuthor: 下-个路口Title: [转]最值得拥有的免费Boo…

    Linux 2023年6月13日
    0107
  • kafka能做什么?kafka集群配置 (卡夫卡 大数据)

    什么是Kafka 官网介绍: 几个概念: 详细介绍 : 操作kafka: kafka集群 消息测试 问题检测 什么是Kafka 官网介绍: ApacheKafka®是一个分布式流媒…

    Linux 2023年6月7日
    0130
  • Linux笔记 bash解决if not found 问题

    Linux笔记 bash解决if not found 问题 原因是if [无空格然后在内容然后再空格] 我想应该新手小白都会犯这样问题 正确写法 if [ $# -ne 1 ] 错…

    Linux 2023年6月8日
    0113
  • 工程课Linux第一节笔记

    上课笔记 文件系统结构 /根目录 /bin/ 存放系统命令,普通用户与root都可以执行 /etc/ 配置文件保存位置 /lib/ 系统调用的函数库保存位置 /var/ 目录用于存…

    Linux 2023年6月6日
    080
  • 数据结构 一元多项式加减法计算器

    cpp;gutter:true;</p> <h1>include</h1> <p>using namespace std;</…

    Linux 2023年6月13日
    084
  • map_set使用说明

    map_set使用说明 map的底层结构大致是一个哈希表,set的底层结构大致是一个红黑树 不代表全部! set #include"map_set.h" //s…

    Linux 2023年6月13日
    095
  • djnago-filter用法

    django-filter用法 集成drf 不指定字段的过滤参数,那么该字段就默认为exact,精准匹配自定义filter文件内 from django_filters impor…

    Linux 2023年6月14日
    0124
  • c++模板类的使用,编译的问题

    前两天在写代码时,把模板类的声明和分开放在两个文件中了,类似于下面这样: stack.hpp: #ifndef _STACK_HPP #define _STACK_HPP temp…

    Linux 2023年6月14日
    096
  • powershell 运行带路径的exe

    &"C:\Program Files\Python38\python.exe" demo_view.py 起因是nodejs16安装时,顺带装了pyth…

    Linux 2023年5月28日
    089
  • PWN学习总结

    一、栈溢出原理 什么是栈溢出?栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分…

    Linux 2023年6月8日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球