文章目录

  • 限制系统性能瓶颈的因素
    • cpu
    • 内存
    • 磁盘IO
    • 网络IO
    • 异常
    • 数据库
    • 锁竞争
  • 衡量系统性能的指标
    • 响应时间
    • 吞吐量
    • 计算机资源分配使用率
    • 负载承受能力

有时候我们的程序性能不高,需要提升性能,这个时候可以从以下几个角度去考虑是什么限制了我们的性能瓶颈.

限制系统性能瓶颈的因素

cpu

有的应用需要大量计算,他们会长时间、不间断地占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题。例如,代码递归导致的无限循环,正则表达式引起的回溯,JVM 频繁的 FULL GC,以及多线程编程造成的大量上下文切换等,这些都有可能导致 CPU 资源繁忙。

这里提一下系统负载和cpu利用率的区别:

系统负载代表单位时间内正在运行或等待的进程或线程数,代表了系统的繁忙程度,CPU利用率则代表单位时间内一个线程或进程实时占用CPU的百分比。我们知道,一个进程或者线程在运行时,未必都在实时的利用CPU的。
       比如,在CPU密集型的情况下,系统的负载未必会高,但CPU的利用率肯定会高,一个线程/进程一直在计算,它对CPU的实时利用率是100%,而系统负载是0.1;
      又比如,而对于I/O密集型的程序来说,有可能CPU的利用率不高,但系统的负载却会非常高,这是因为I/O经常引起阻塞,这样导致很多线程/进程被处于阻塞等待状态,处于等待的线程或进程也是属于负载线程/进程的。

内存

Java 程序一般通过 JVM 对内存进行分配管理,主要是用 JVM 中的堆内存来存储 Java 创建的对象。系统堆内存的读写速度非常快,所以基本不存在读写性能瓶颈。但是由于内存成本要比磁盘高,相比磁盘,内存的存储空间又非常有限。所以当内存空间被占满,对象无法回收时,就会导致内存溢出、内存泄露等问题。

磁盘IO

磁盘相比内存来说,存储空间要大很多,但磁盘 I/O 读写的速度要比内存慢,虽然目前引入的 SSD 固态硬盘已经有所优化,但仍然无法与内存的读写速度相提并论。

网络IO

网络对于系统性能来说,也起着至关重要的作用。如果你购买过云服务,一定经历过,选择网络带宽大小这一环节。带宽过低的话,对于传输数据比较大,或者是并发量比较大的系统,网络就很容易成为性能瓶颈。

异常

Java 应用中,抛出异常需要构建异常栈,对异常进行捕获和处理,这个过程非常消耗系统性能。如果在高并发的情况下引发异常,持续地进行异常处理,那么系统的性能就会明显地受到影响

tips:如果想抛出异常,又不想打印堆栈,可以自己实现自定义异常,继承RuntimeException,然后将writableStackTrace设置为false。

以下是RuntimeException的构造函数:

protected RuntimeException(String message, Throwable cause,boolean enableSuppression,boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}

数据库

大部分系统都会用到数据库,而数据库的操作往往是涉及到磁盘 I/O 的读写。大量的数据库读写操作,会导致磁盘 I/O 性能瓶颈,进而导致数据库操作的延迟性。对于有大量数据库读写操作的系统来说,数据库的性能优化是整个系统的核心。

锁竞争

在并发编程中,我们经常会需要多个线程,共享读写操作同一个资源,这个时候为了保持数据的原子性(即保证这个共享资源在一个线程写的时候,不被另一个线程修改),我们就会用到锁。锁的使用可能会带来上下文切换,从而给系统带来性能开销。JDK1.6 之后,Java 为了降低锁竞争带来的上下文切换,对 JVM 内部锁已经做了多次优化,例如,新增了偏向锁、自旋锁、轻量级锁、锁粗化、锁消除等。而如何合理地使用锁资源,优化锁资源,就需要你了解更多的操作系统知识、Java 多线程编程基础,积累项目经验,并结合实际场景去处理相关问题。

衡量系统性能的指标

响应时间

响应时间是衡量系统性能的重要指标之一,响应时间越短,性能越好,一般一个接口的响应时间是在毫秒级。在系统中,我们可以把响应时间自下而上细分为以下几种:

  • 数据库响应时间:
    数据库操作所消耗的时间,往往是整个请求链中最耗时的;
  • 服务端响应时间:
    服务端包括 Nginx 分发的请求所消耗的时间以及服务端程序执行所消耗的时间;
  • 网络响应时间:
    这是网络传输时,网络硬件需要对传输的请求进行解析等操作所消耗的时间;
  • 客户端响应时间:
    对于普通的 Web、App 客户端来说,消耗时间是可以忽略不计的,但如果你的客户端嵌入了大量的逻辑处理,消耗的时间就有可能变长,从而成为系统的瓶颈。

吞吐量

在测试中,我们往往会比较注重系统接口的 TPS(每秒事务处理量),因为 TPS 体现了接口的性能,TPS 越大,性能越好。在系统中,我们也可以把吞吐量自下而上地分为两种:磁盘吞吐量和网络吞吐量。

  • 磁盘吞吐量
    磁盘性能有两个关键衡量指标。一种是 IOPS(Input/Output Per Second),即每秒的输入输出量(或读写次数),这种是指单位时间内系统能处理的 I/O 请求数量,I/O 请求通常为读或写数据操作请求,关注的是随机读写性能。适应于随机读写频繁的应用,如小文件存储、OLTP 数据库、邮件服务器。另一种是数据吞吐量,这种是指单位时间内可以成功传输的数据量。对于大量顺序读写频繁的应用,传输大量连续数据,例如,电视台的视频编辑、视频点播 VOD(Video On Demand),数据吞吐量则是关键衡量指标。
  • 网络吞吐量
    这个是指网络传输时没有帧丢失的情况下,设备能够接受的最大数据速率。网络吞吐量不仅仅跟带宽有关系,还跟 CPU 的处理能力、网卡、防火墙、外部接口以及 I/O 等紧密关联。而吞吐量的大小主要由网卡的处理能力、内部程序算法以及带宽大小决定。

计算机资源分配使用率

通常由 CPU 占用率、内存使用率、磁盘 I/O、网络 I/O 来表示资源使用率。这几个参数好比一个木桶,如果其中任何一块木板出现短板,任何一项分配不合理,对整个系统性能的影响都是毁灭性的。

负载承受能力

当系统压力上升时,你可以观察,系统响应时间的上升曲线是否平缓。这项指标能直观地反馈给你,系统所能承受的负载压力极限。例如,当你对系统进行压测时,系统的响应时间会随着系统并发数的增加而延长,直到系统无法处理这么多请求,抛出大量错误时,就到了极限。

今天的分享就到这里了,有问题可以在评论区留言,均会及时回复呀.
我是bling,未来不会太差,只要我们不要太懒就行, 咱们下期见.

限制系统性能瓶颈的因素、衡量系统性能的指标相关推荐

  1. 系统性能衡量维度、指标

    一.性能问题简介 应用性能是产品用户体验的基石,性能优化的终极目标是优化用户体验.当我们谈及性能,最直观能想到的一个词是"快",Strangeloop在对众多的网站做性能分析之后得 ...

  2. 【控制】影响系统响应的因素

    影响系统响应的因素 输入 ur(t)u_r(t)ur​(t)--规定 r(t)=1(t)r(t)=1(t)r(t)=1(t) 初始条件--规定0初始条件 系统的结构参数--自身特性决定系统动态性能 F ...

  3. 计算机与汉字+输入速度+云输入法,影响速录系统速度的因素

    影响速录系统速度的因素 一个完整的速录系统由以下三个部分组成:打字法.输入法.词库/句库.下面是YJBYS小编整理的影响速录系统速度的因素的相关内容,希望对你有帮助! 打字法 手的打法分为两种,一种是 ...

  4. 智兆APS:服装行业APS智能排产系统的约束因素

    上一篇文章讲了智兆APS如何赋能服装企业实现小单柔性快反供应链协同计划,这次我们来讲讲智兆APS智能排产系统的约束因素. 服装制造是一个小单快反,短周期的时尚行业,意味着生产的周期极短,生产的反应速度 ...

  5. 衡量计算机的指标(纯小白视角,帮助你理解如何去以较为专业的角度衡量计算机)

    我是小康小白,一个平平无奇的Java小白.热爱有趣的文字,生活和远方. 个人博客:https://blog.csdn.net/weixin_45791445 有问题欢迎QQ联系:1059320343 ...

  6. 基于相关性分析系统性能瓶颈

    测试的过程中,难免需要会遇到一些性能瓶颈,那么就要求我们能够分析出性能瓶颈,并给出解决方案. 性能瓶颈很抽象,我们可以通过数据使其具象. 以我工作内容为例,服务器处理数据的能力是有限的,那么其处理的边 ...

  7. fedora 11 下分析系统性能瓶颈之(一)mpstat

    CPU是我们时常关注的,linux下面提供了很多查看系统性能的工具,像mpstat,iostat,vmstat,top等. 下面分别分析一下: mpstat是Multiprocessor Statis ...

  8. 全院级pacs系统中前置服务器,PACS系统性能优化的实施与体会——蒋昆 李哲 赵海涛...

    PACS系统性能优化的实施与体会 蒋昆① 李哲①赵海涛② ① 第四军医大学西京医院信息科,710032,陕西省西安市长乐西路127 号 ② 第四军医大学西京医院放射科,710032,陕西省西安市长乐西 ...

  9. 构建微波和毫米波自动测试系统需要考虑哪些因素?(一)

    自动测试系统是5G.下一代WiFi.卫星通信系统的高频测试的基础,而数字步进衰减器.移相器和信号发生器等可编程射频设备则是这些系统的重要组成部分.在测试和测量5G和WiFi 6/6E系统时,需要进行射 ...

最新文章

  1. Nexus3.x安装
  2. 17岁读大学,25岁博士毕业,高颜值医生爆红网络,却坦言只是普通人
  3. 开发最前沿:项目案例实战之桥模式
  4. MySQL软件的介绍
  5. 实战分享|数据驱动「付费转化」的3个思路
  6. 计算机组成原理指令译码,计算机组成原理实验报告指令译码器.docx
  7. 常用MIME类型(Flv,Mp4的mime类型设置)
  8. python 解三阶多项式系数_python – 评估多项式系数
  9. html 滑动网格列表,网格列表
  10. docker安装指定版本的tag镜像
  11. mysql专业连接工具_mysql(MySQL客户端连接工具)
  12. LSB信息隐藏的卡方分析
  13. 引入element组件插件
  14. CF - 158B - Taxi
  15. 记录WIN10选择文件右键后资源管理器无响应的解决方法
  16. LoRa节点开发:5、代码详解LoRaWAN中的几种数据包(发送与接收数据)
  17. 2020高考一轮复习数学:必修1集合的概念及运算【经典例题及解析】
  18. Drupal网站系统的应用
  19. 如何快速将pdf转换excel转换
  20. 用C++实现简易的文本编辑器

热门文章

  1. 30js学习第十三天HTML改变输出
  2. 夜山明酒:喝酒的境界是什么
  3. java 地图报表_Echarts实现定位-高德-天地图
  4. 前端CSS颜色代码大全
  5. 台式计算机抬高多少度,显示器抬高多少厘米合适(电脑垫多高颈椎最舒服)
  6. 罗剑锋透视HTTP协议学习笔记---25 | 固若金汤的根本(下):数字签名与证书
  7. C2C平台退换货逆向寄件服务,快递鸟“上门取件“解决方案
  8. 解析常见的数据分析模型——行为事件分析
  9. 机器学习三大神器GBDT、XGBoost、LightGBM
  10. Java中的低耦合高内聚法则