吞吐量 和 延时的关系

关于吞吐量/吞吐率、延时,你可以通过 Jmeter中的”聚合报告“和”用表格查看报告“来获取。

  • Throughput 越大,Latency 越差:因为请求过多,系统繁忙导致响应速度降低。
  • Latency 的值越小说明能支持的 Throughput 越高:Latency 数值小说明系统处理速度快,自然便可以处理更多的请求。
  • Throughput "不用" 通过降低 latency 的方式来提高,排查性能问题的时候,勿在降低 Latency 值上消耗过多时间。

常见系统瓶颈

  • 类型转换:除了装箱拆箱外,还要着重看下 JSON 的一些转换类库,如 newtown,fastJson 等等,可能会引起 CPU 维持在高位。
  • 异步操作:有些异步操作会非常影响性能,尤其是在网络较差的情况下,很可能阻塞业务。
    • 如异步下的状态通知通常会影响性能。通常而言,异步操作会让”吞吐率“提升,但会牺牲 延时(latency)。

定位性能瓶颈

定位的方式不一定是程序级别的,一开始可以先从操作系统的 CPU 使用率,内存使用率,系统 IO 和 网络 IO,网络连接数 着手分析。

  • CPU 使用率不高,但是 throughtput 和 latency 上不去: 说明程序没有忙于计算,可能问题在 I/O 上。
    • 一般 CPU 和 IO 是反着来的: CPU 没问题,问题可能在 IO,反之亦然。
  • 如果 CPU、IO、内存、网络带宽使用都不高,但是系统性能上不去: 说明程序有问题,可能是为资源被锁,存在锁竞争关系,程序被阻塞;或者是在上下文切换等等。
  • 关于 IO,要看 3 个方面:磁盘IO,网络IO 以及 内存换页率。
  • 程序级别的性能瓶颈定位:
    • 分段注释代码 / 让一些函数空转 / 做一些硬编码的 Mock,然后再测试下 Throughput 和 latency,看是否有好转,如果有,说明函数是瓶颈,再进一步在这个函数体内注释代码,直到找到最耗性能的语句。
  • 分析内存:需要用到的计数器:Memory 类别 和 Physical Disk 类别的计数器,步骤如下:
    1. 查看 Memory:Available Mbytes 指标:如果该指标的数据较小,系统可能出现了内存方面的问题,需要继续下面步骤进一步分析。
    2. 注意 Memory:Pages/sec、Pages Read/sec 和 Page Faults/sec 的值:操作系统会利用磁盘较好的方式提高系统可用内存量或者提高内存的使用效率。这 3 个指标直接反映了 OS 进行磁盘交换的频度。
      • Pages/sec 值 持续高于几百,可能内存有问题。Pages/sec 值大不一定就表明内存有问题,可能是运行使用内存映射文件的应用导致。
      • Page Faults/sec 越高说明每秒发生页面次数越多,说明 OS 向内存读取的次数越多。此时需要查看 Pages Read/sec 的计数值,该值阈值是 5,超过 5,则可以判断存在内存方面的问题。
    3. 根据 Physical Disk 计数器的值分析性能瓶颈:需要分析 Page Reads/sec 和 %Disk Time 及 Average Disk Queue Length 的分析。如果 Pages Read/sec 很低,同时 %Disk Time 和 Average Disk Queue Length 的值很高,则可能有磁盘瓶颈。但是,如果队列长度增加的同时 Pages Read/sec 并未降低,则是内存不足
  • 分析处理器:
    1. 排查 System:%Total Processor Time 计数器的数值:该值体现的是服务器 CPU 的整体利用率,对于多核系统而言,该值体现的是所有 CPU 的平均利用率。
      • 如果该值持续超过 90%,说明整个系统面临着处理器方面的瓶颈,需要增加处理器来提高性能。
      • P.S.:多核下,如果该数据不大,但是各个 CPU 的 负载不均衡,也可以认为是 CPU 产生了瓶颈。
    2. 排查每个 CPU 的 Processor:%Processor Time 和 %User Time 和 %Privileged Time:
      • %Processor Time 很高时,一般 CPU 都阻塞着,但是反之并不亦然。
      • %User Time:非系统内核操作消耗的 CPU 时间(如调用系统本身资源--网络、IO等),若该值较大,可以考虑优化代码、优化算法;如果该服务器是数据库 Server,则该值较大的话可能是数据库的”排序“或是”函数操作“消耗了过多的 CPU 时间,此时可考虑对 DB 进行优化。
      • %Privileged Time:系统内核操作消耗的 CPU 时间
    3. 验证是否系统 CPU 瓶颈:
      • 查看 System:Processor Queue Length 计数器:如果该值大于 CPU 数量的总数 + 1 的时候,说明产生了处理器阻塞。
  • 分析磁盘I/O:
    1. 如果计算得出每个磁盘的I/O 超过了磁盘本身的I/O能力,则可以确认磁盘是引起瓶颈的因素之一。
    2. 与 Processor:%Privileged Time 联合分析:如果 Physical Disk:%Disk Time 较大,其他值比较适中,则硬盘可能是瓶颈,若几个值都比较大,且持续超过 80%,则可能是内存泄漏。
    3. 分析 Disk sec/Transfer:一般来说,该值小于 15ms 为最佳,15~30ms 为良好,30~60ms 为可接受,超过 60ms 则需要考虑更换硬盘或者更换 raid 方式了。
  • 分析进程:
    • 查看 Process:%Processor Time的值:每个进程的该值反映的是进程消耗 CPU 的时间。
    • 查看 Process:%Page Failures/sec 和 Memory:%Page Failures/sec 的比值,过滤出是哪个进程产生的最多的页错误,一般这个进程是需要大量内存的进程,或者是非常活跃的进程(即在压测情况下,就是你要压测的进程)
    • Process:%Private Bytes:该计数器指进程所占有的私有数据(单位字节),即无法与其他进程共享的数据量,可以利用该值来判断应用是否存在内存泄漏。
      • 对于 IIS 进程,可以重点监控下 INetInfo进程的 Private Bytes,如果在压测过程中,该值不断增加,或是在压测结束后,该值仍然处于一个高水平,则说明应用存在内存泄漏
  • 分析网络:
    • Network Interface:Bytes Total/sec 为发送和接收字节的速率,可以通过该计数器值来判断网络链接速度是否是瓶颈,具体操作方法是用该计数器的值和目前网络的带宽进行比较。
    • 联合 Processor:%Privileged Time 进行分析:如果 Physical Disk:%Disk Time比较大,其他值比较适中,则硬盘可能是瓶颈,若几个值都比较大,且持续超过 80%,则可能存在内存泄漏。

性能优化的几个策略

  • 应用层面:
    • 善用 CDN,缓存,冗余数据,SLB。
    • 如果瓶颈在网络传输,那么需要对传输数据进行压缩(需要注意,压缩算法是很耗时的,只在瓶颈是网络传输的时候再考虑,你需要根据测试数据自行权衡。)。
    • 并行处理的时候需要注意下宿主机是否是多核。如果宿主机是单核的,而程序代码是多进程、多线程的,那么对于高计算密集型的应用会适得其反,反而更慢。
  • 优化代码:
    • 减少循环层数、减少递归。
    • 在循环体中少做声明变量、分配 / 释放内存的操作:把循环体内的表达式抽离到循环体外。
    • 注意函数调用在栈上的开销。
    • 合理使用 try-catch:不要用抛异常作为常规业务的失败流程(如进行业务报错)。
    • 字符串处理需注意:减少不必要的声明实例(.net core 出了一个 Span 类型,可以用来替代 Substring。)
    • 不同的语言和代码库,对于复杂度是不一样的,这个需要注意:如应该用 List.Count==0 来代替List.Any() 来判断是否有数据。
      • 关于这点,你可以使用计数器来判断、测试自己写的代码在”耗时、Cpu Cycle,0/1/2代 GC回收“等数据的差异,择优而定。
  • 算法调优:
    • 哈希算法并不高效,使用时候还需注意。
    • 善用预处理和分量分次分批处理:像月报表之类的执行频率低,但每次执行都很耗资源的,你可以尝试预先每天/每周处理,不用等到每月才执行。
  • 多线程调优:
    • 多线程的瓶颈主要在互斥和同步锁上,以及线程上下文切换的成本上:你应尽量少用甚至不用锁,或者用乐观锁替代现有直接用 Lock 的锁。
  • 内存分配:当内存出现碎片时,会相当耗时。
    • 在编码的时候,意识上尽可能少的进行内存的分配。
  • 池化技术对于一些短作业来说相当有效:如 HttpClientFactory 就是用了 http 池,可以用来减少对象创建、线程创建的开销。
  • 网络调优:
    • TCP 很耗资源,对系统开销很大:你可以搜索关键字:TCP Tuning 进行相关调优
    • TCP 和 HTTP 要配置下 Keep-Alive,尤其是像 http 这样的短连接,这也可以在一定程度上防止 DDoS攻击。
    • 对于 TCP 的 TIME_WAIT,这个状态默认会持续 4 分钟(持续 2 个 MSL--Max Segment Lifetime),TIME_WAIT 状态下的资源不能回收,有大量 TIME_WAIT 连接的情况一般是在 HTTP 服务器上。
      • 你可以在注册表中新建、设置 TCP 的 TcpTimedWaitDelay 和 MaxUserPort 项,来增加 TCP 连接释放时间和临时端口数。
    • TCP 一旦发生丢包,TCP 的带宽使用率会受到影响(盲目减半),再丢包,再减半;什么时候不丢包了,就会逐步恢复。
  • CPU 调优:
    • CPU0 很关键, 它一般担任着调节功能(如内核和非内核操作,上下文切换等),如果 0 号 CPU 被用得过狠的话,别的 CPU 性能也会下降。
      • windows 下可在“任务管理器”中,右键“进程”选择“设置相关性”来设置该进程可以运行在哪些核上。
      • linux:使用 taskset 命令来设置(可以通过安装 schedutils 来安装这个命令) 。

性能监视器

在服务器上最直观监视性能的方式就是直接使用系统自带的”性能监视器“。

>perfmon #直接在 "运行" 中输入 perfmon 即可打开

若要进一步监控内存,可结合使用 RAMMap 和 VMMap 。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全像宇宙投影第三部时间与空间(全文)下载

当这个人向空中凝视时,他所在的房间渐渐变得透明而朦胧,空中渐渐浮现一个久远前景像。突然他觉得自己在皇宫中庭内,他面前站著一位年轻女士非常美丽,有著橄榄色的皮肤。他可以见到她的颈项、手腕、脚踝上都挂著金饰,还…

如何使用AzurEnum快速枚举Microsoft Entra ID(Azure AD)

AzurEnum是一款针对Azure的安全工具,在该工具的帮助下,广大研究人员可以轻松快速地枚举Microsoft Entra ID(Azure AD)。 该工具基于纯Python 3开发,可以在Windows和Linux系统上运行,但考虑到性能和稳定性&a…

windows下mysql5.6下载安装(多实例安装)

目录 1、下载 2、安装步骤 3、mysql多实例安装 1、下载 http://dev.mysql.com/downloads/windows/installer/5.6.html 2、安装步骤 我们采用自定义安装模式:选择32位或64位 默认即可: 说明,如果没有该页面就上一步,选择高级选…

类人速度超快语音响应!OpenAI推出新旗舰模型GPT-4o,图文音频手机AI搞定

内容概述 虽然没有带来备受期待的人工智能(AI)搜索引擎,但OpenAI在主打产品AI模型上花了更多心思,拓展多模态功能,让用户可以免费玩转文字、图片和语音输入。 美东时间5月13日周一,OpenAI首席技术官Mira …

三星将采用铁电材料实现1000层3D NAND

在2022年的技术日上,三星公布了一项宏伟目标,即到2030年推出层数超过1000层的先进NAND芯片。据Wccftech报道,这家韩国存储巨头似乎正逐步接近这一目标,计划在NAND芯片制造中应用新型“铁电”材料。 最近美国火奴鲁鲁举行的VLSI技术…

学习Uni-app开发小程序Day11

今天是学习的第11天,今天学习了组件的生命周期,这里的生命周期,主要是学习uni-app的组件生命周期,虽然vue也有,但主要还是学习uni-app的。1. onLoad 监听页面加载,该钩子被调用时,响应式数据、计…

2024 年第一季度全球互联网中断事件

2024 年第一季度伊始,互联网发生了多起中断事件。陆地和海底电缆的损坏在多个地方造成了问题,而与持续中地缘政治冲突相关的军事行动影响了其他地区的连接。 几个非洲国家以及巴基斯坦的政府下令关闭互联网,主要针对移动网络连接。 被称为Ano…

Taylor Francis科技期刊数据库文献去哪里获取

一、Taylor & Francis科技期刊数据库简介: Taylor & Francis 科技期刊数据库(T&F ST Library)提供超过520种经专家评审的高质量科学与技术类期刊, 其中超过85%的期刊被Web of Science收录,内容最早至1997年。该科技期…

011.理解事件(events)和流(streams)

在软件系统中,事件是一种用于指示发生了什么事情的消息。该事件可能代表一个技术事件——例如,在GUI应用程序中,您可能会在按下的每个键或每次鼠标移动上看到事件。该事件还可以表示业务发生,例如在金融系统中完成的货币交易。 事…

【启程Golang之旅】环境设置、工具安装与代码实践

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

LearnOpenGL(十七)之混合

一、丢弃片段 有些图片并不需要半透明,只需要根据纹理颜色值,显示一部分(alpha值为1.0),或者不显示一部分(alpha值为0.0),没有中间情况。我们需要丢弃(Discard)显示纹理中透明部分的…

嵌入式学习71-(内核定时器和传感器)

缺少内核配置文件.config 解决:cp config_mini2440_td35 .config 1.make 编译一下 生成timer.ko文件 2. cp timer.ko ~/nfs/rootfs 为什么要拷贝到rootfs中,这是挂载的根文件系统 ,使用nfs作为根文件系统 实际上内核启动的时候并不知道…

【问题实操】银河高级服务器操作系统实例分享,网卡drop问题分析

1.服务器环境以及配置 系统环境 物理机/虚拟机/云/容器 物理机 网络环境 外网/私有网络/无网络 私有网络 硬件环境 机型 华鲲振宇 TG225B1 处理器 kunpeng 920 内存 1024GB 主板型号 TG225B1 HZKY 整机类型/架构 aarch64 固件版本 6.57 软件环境 具体操作系…

基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 扩散映射(Diffusion Maps) 4.2 卡尔曼滤波 4.3 基于梯度流的扩散映射卡尔曼滤波(GFDMKF) 5.完整程序 1.程序功能描述 基于梯度流的扩散…

Golang | Leetcode Golang题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; func grayCode(n int) []int {ans : make([]int, 1<<n)for i : range ans {ans[i] i>>1 ^ i}return ans }

vue3使用el-radio-group获取表格数据无法选中问题

这里是引用 今天写项目发现使用el-radio-group无法获取表格中的数据&#xff0c;于是去官网查看了一下&#xff0c;发现写的没啥问题&#xff0c;就是 <el-radio value"1" size"large"> 未知</el-radio>这样的写法&#xff0c;又在网上看了一些…

RGMII基于V2.0规范解读

一、说明 RGMII&#xff08;Reduced Gigabit Media Independent Interface&#xff09;是Reduced GMII&#xff08;吉比特介质独立接口&#xff09;&#xff0c;旨在替代IEEE802.3u MII、IEEE802.3z GMII和TBI。主要目标是将MAC和PHY互连所需的引脚数量从最大28个引脚&#xf…

求正方形阴影部分面积

正方形边长6&#xff0c;求阴影部分面积 xy6① vw6② 1/26v1/23x1/263③ 1/26v1/26y1/266④ ③是左下角三角形的面积&#xff0c;④是左上角三角形的面积。 求解方程组得到x2 阴影部分面积1/2*3x3.

第2章Spring Boot实践,开发社区登录模块【仿牛客网社区论坛项目】

第2章Spring Boot实践&#xff0c;开发社区登录模块【仿牛客网社区论坛项目】 前言推荐项目总结第2章Spring Boot实践&#xff0c;开发社区登录模块1.发送邮件配置MailClient测试 2.开发注册功能访问注册页面提交注册数据激活注册账号 3.会话管理体验cookie体验session 4.生成验…

idea使用gitee基本操作流程

1.首先&#xff0c;每次要写代码前&#xff0c;先切换到自己负责的分支 点击签出。 然后拉取一次远程master分支&#xff0c;保证得到的是最新的代码。 写完代码后&#xff0c;在左侧栏有提交按钮。 点击后&#xff0c;选择更新的文件&#xff0c;输入描述内容&#xff08;必填…