java性能优化实战:系统组件的瓶颈有哪些以及如何判断?

本文介绍了Java性能优化中如何分析CPU、内存和I/O的瓶颈。通过top、负载和vmstat命令观察CPU性能,关注空闲CPU、负载和上下文切换。内存方面,关注VIRT、RES、SHR和HugePage。I/O部分,使用iostat检查磁盘I/O繁忙程度,并讨论零拷贝技术提高效率。这些工具和概念有助于定位和优化系统的性能问题。
摘要由CSDN通过智能技术生成

计算机各个组件之间的速度往往很不均衡,比如 CPU 和硬盘,比兔子和乌龟的速度差还大,那么按照我们前面介绍的木桶理论,可以说这个系统是存在着短板的。

当系统存在短板时,就会对性能造成较大的负面影响,比如当 CPU 的负载特别高时,任务就会排队,不能及时执行。而其中,CPU、内存、I/O 这三个系统组件,又往往容易成为瓶颈,所以接下来我会对这三个方面分别进行讲解。

CPU

首先介绍计算机中最重要的计算组件中央处理器 CPU,围绕 CPU 一般我们可以:

  • 通过 top 命令,来观测 CPU 的性能;

  • 通过负载,评估 CPU 任务执行的排队情况;

  • 通过 vmstat,看 CPU 的繁忙程度。

具体情况如下。

1.top 命令 —— CPU 性能

如下图,当进入 top 命令后,按 1 键即可看到每核 CPU 的运行指标和详细性能。

 

CPU 的使用有多个维度的指标,下面分别说明:

  • us 用户态所占用的 CPU 百分比,即引用程序所耗费的 CPU;

  • sy 内核态所占用的 CPU 百分比,需要配合 vmstat 命令,查看上下文切换是否频繁;

  • ni 高优先级应用所占用的 CPU 百分比;

  • wa 等待 I/O 设备所占用的 CPU 百分比,经常使用它来判断 I/O 问题,过高输入输出设备可能存在非常明显的瓶颈;

  • hi 硬中断所占用的 CPU 百分比;

  • si 软中断所占用的 CPU 百分比;

  • st 在平常的服务器上这个值很少发生变动,因为它测量的是宿主机对虚拟机的影响,即虚拟机等待宿主机 CPU 的时间占比,这在一些超卖的云服务器上,经常发生;

  • id 空闲 CPU 百分比。

一般地,我们比较关注空闲 CPU 的百分比,它可以从整体上体现出来 CPU 的利用情况。

2.负载 —— CPU 任务排队情况

如果我们评估 CPU 任务执行的排队情况,那么需要通过负载(load)来完成。除了 top 命令,使用 uptime 命令也能够查看负载情况,load 的效果是一样的,分别显示了最近 1min、5min、15min 的数值。

 

如上图所示,以单核操作系统为例,将 CPU 资源抽象成一条单向行驶的马路,则会发生以下三种情况:

  • 马路上的车只有 4 辆,车辆畅通无阻,load 大约是 0.5;

  • 马路上的车有 8 辆,正好能首尾相接安全通过,此时 load 大约为 1;

提高JAVA开发效率的JProbe Suite JProbe Suite ——提高开发效率,改善JAVA应用性能 * 轻松发现和消除性能瓶颈 * 查找问题代码 * 节省后续硬件及开发投入 * 增加应用发布信心 * 与开发过程集成,改善应用性能 JProbe Suite是一种能节省开发时间、降低开发费用、改善Java应用运行速度及和扩展能力的强大工具套件,在全球各地拥有大量用户。通过JProbe Suite,开发和测试小组可以全面诊断应用性能、内存使用、线程及代码覆盖等问题。无须修改应用,JProbe就能对桌面或远程服务器上的应用进行分析,实现强大的信息展示和Java代码性能诊断功能。利用JProbe先进的数据收集功能,可以实现自动化的性能信息采集,缩短应用开发和优化周期。 JProbe在简单易用的集成化套件中,为servlet、JSP和EJB应用代码提供了强大的Java性能分析、内存纠错、代码覆盖及线程分析功能。 JProbe Profiler JProbe Profiler * JProbe Profiler JProbe Profiler内置了Call Graph调用关系图和高级数据采集机制,可实现方法和代码行级的高精度性能诊断。 主要功能: 方法和行级分析:确定方法的热点,并以逐行方式挖掘分析性能状态。 计算运行时间或CPU时间占用:跟踪用户体验或计算瓶颈; 9种指标:多角度确定问题根源; 高级过滤和触发器:确定要诊断分析的关键代码区域; 快照对比技术:预测代码修改对性能的影响; 高级打印和输出功能:支持PDF、文本、HTML或Excel兼容的CSV格式。 JProbe Memory Debugger JProbe Memory Debugger可帮助开发人员快速查找Java代码的内存泄露和对象循环。内置的图形化实时内存使用和对象视图,有助于开发人员理解应用的内存使用,设法减少内存消耗以提高应用性能。 主要功能: 识别内存泄漏:通过易用的两步分析,跟踪运行时的内存增长; Memory Instance Calculator:计算内存泄露量; 智能化内存分析:通过Leak Doctor发现可能的内存泄露源; Aggregate Memory Footprint:理解对象创建的实际开销; Reference Graph 和 Instance Detail:跟踪内存使用和对象引用; 垃圾回收分析:检测过多的短期对象和垃圾收集详情; Snapshot 比对:确定代码改变对内存使用的影响。 JProbe Coverage *JProbe Coverage 帮助开发人员查找未执行代码,精确计算已执行代码,简化对测试工作可靠性和精确度的评估。 主要功能: Coverage Browser 和 Source Views:迅速确定未测试代码或死代码; Conditional Coverage Analysis: 分析特定条件所覆盖的代码范围,包括含有多个条件语句的代码行; Filter Catch Blocks: 更精确的覆盖范围报告; 批处理模式: 可通过批处理方式运行,简化与夜间编译/测试系统的整合; 报表功能: 以XML、纯文本、CSV或者HTML格式输出覆盖范围报告,以实现个性化的分析; Snapshot合并: 对多次运行中的覆盖范围数据进行合并; 可与下列应用服务器整合 o BEA WebLogic Server o IBM WebSphere Application Server o Sun Java System Application Server o Apache Tomcat o Oracle9i Application Server o JBoss o Macromedia JRun ........ 可与下列开发环境整合 o IBM WebSphere Studio Application Developer (WSAD) o Eclipse o Borland JBuilder o IntelliJ IDEA o Sun Java Studio o JBoss o Oracle Jdeveloper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值