基于等待的调优方法
建好了负载测试,接下来就是决定把调优精力放在何处。大多数调优指南都会提到“性能比率”或者度量之间的关系。例如,某调优指南可能强调说缓存命中率应该达到80%或者更高,因此负载测试应用时调整缓存大小直到命中率达到80%.然后处理列表上的下一个度量值,但是不要忘记验证调整新的参数不会影响之前已经调好的其他参数。
这项工作不仅困难而且效率很低。例如,调整缓存命中率到80%可能是件好事,但是存在一些更重要的问题:
● 该应用如何依赖于缓存(与该缓存交互的请求比例是多少)?
● 这些请求对应用中的其他请求有多大影响力?
● 被缓存的条目的本质是什么?它们真的需要缓存吗?
基于等待的调优方法提出了一个新的思想,即分析应用的业务交互和实现这些交互的底层结构,然后优化这些业务交互的处理。第一步是分析应用的架构以定位实现业务请求的相关技术。每一个技术代表一个“等待点”,或者说在应用的这个地方,请求可能需要等待一些事情才能继续处理。例如,如果一个请求执行了一次数据库查询,则它必须从连接池中获取一个数据库连接—如果连接池里没有可用的连接,则该请求必须等待直到有连接可用。同样,如果某请求调用了一个web服务,而那个web服务维护了一个请求队列(对应一个线程池处理请求),这会潜在的导致请求等待直到一个处理线程可用。
从以上称之为等待点分析的方法中,可以定位两种类型的等待点:
● 基于层次的等待点
● 基于技术的等待点
本节首先概述了基于等待点的架构分析方法,然后分别研究了不同类型的等待点。
等待点架构分析
从上面讨论中得出的最重要的结论就是性能调优必须在应用架构的环境中执行。这也是调优性能比率为何如此低效的一个原因:主观的调整一个性能参数到一个最佳值,对应用可能是好事也可能是坏事——因为这可能会也可能不会有利于最终用户体验。
基于等待点的分析是一个分析应用中主要请求处理路径的过程,借此定位潜在影响该请求可能会等待的资源。在等待点分析实践中最有效的办法是定位并标出应用中核心处理路径。这包括一个请求可能访问的所有层次、请求交互的所有外部服务、被做成池的所有对象和全部缓存对象。
基于层次的等待点
一个请求穿过一个物理层,比如在web层和业务层之间切换,或者调用外部服务器
,比如web服务,每当这种时候,都意味着伴随着转换,这里存在一个隐式等待点。如果服务器在某一时刻只处理单个请求是没有效率的,因此他们使用了多线程方法。典型的,一个服务器在某个socket端口监听访问的请求——每当收到一个请求它就会把请求放在队列中,然后返回监听其他请求。请求队列对应着一个线程池,负责从队列中提取请求并处理。图2描述了对于三层结构(web服务器、动态web层和业务层)的执行过程。
图 2 基于层次的等待点
因为请求穿越层次的动作会引起请求队列,由相应的线程池处理,这种线程池也是一个潜在的等待点。每一个线程池的大小的调优必须基于以下考虑:
● 池必须足够大使得访问的请求无需不必要的等待一个线程。
● 池不能大到耗尽服务器。过多的线程会迫使服务器花费大量时间用于在不同的线程上下文中切换,真正处理请求的时间反而更少了。这种情况通常表现为CPU使用率很高,但是处理请求的吞吐量却降低了。
● 池的大小不能透支与之交互的后台资源。例如,如果数据库对于单个服务器只支持50个请求,那么服务器不应该向数据库发送超过50个数量的请求。
服务器线程池的最佳尺寸的标准是:对受限制的依赖资源产生足够的负载—最大化它们的使用率而不让其透支。下面的“后退调优”一节有更多调整受限制资源池大小的内容。
更多信息请查看 java进阶网 http://www.javady.com
分享到:
相关推荐
### Java性能调优知识点概述 #### 一、高性能Java代码编写原则 - **算法与数据结构**:选择合适的数据结构可以极大地提升程序运行效率。例如,对于查找操作频繁的场景,哈希表(如`HashMap`)比链表或数组更高效。...
Java性能调优是一种针对Java应用程序进行优化以提升其运行效率和响应速度的技术。现代企业级Java应用具有高度的复杂性,涉及多种输入源、多输出形式、复杂的框架和业务处理引擎,这使得调优变得尤为困难。过去,基于...
本文基于一份来自Oracle官方的中文版WebLogic性能调优教程,深入解析其中的关键知识点,涵盖WebLogic Server内核、Web应用程序、JDBC、EJB/MDB、JMS、超时及诊断性能问题等多方面调优策略。 ### WebLogic Server...
### 生产环境下的Java排错调优 #### 开源力量公开课第1期——生产环境下的Java排错调优 本次公开课由施懿民老师主讲,聚焦于生产环境下的Java排错与性能优化,这对于提高Java应用的稳定性和效率至关重要。 #### ...
性能调优对于确保应用高效运行至关重要,尤其是对于处理高并发和大数据量的应用来说。本文将深入探讨“WAS性能调优对jvm、线程数、ORB大小的配置”这一主题。 首先,我们要理解JVM(Java Virtual Machine)在WAS中...
### Java性能测试与调优案例 #### JDK优化 在Java应用开发过程中,为了提升程序运行效率及稳定性,对JDK的优化尤为重要。JVM(Java虚拟机)作为Java程序运行的基础,其性能直接影响到应用程序的表现。JVM有两种...
在CMT(Chip Multi-Threading)平台上对Java应用进行性能优化是一个复杂且具有挑战性的过程,尤其是在处理高并发、大规模用户访问的场景下。本文将深入探讨如何在CMT架构下,通过调整JVM参数、优化多线程设计以及...
本文档旨在探讨Java企业版(Java EE)环境下性能调优的最佳实践,包括方法论、负载测试工具、软件栈中的各组件调优策略以及未来性能趋势展望。 #### 二、方法论与过程 ##### SunTone-3D 应用方法论 SunTone-3D 是...
VisualVM是一款强大的Java性能分析工具,它由Oracle公司提供,是Java开发者进行性能调优的重要助手。本资料包含的源码是VisualVM针对Java应用程序的CPU硬件资源管理部分,通过分析这些源代码,我们可以深入了解Java...
Java性能分析工具,如JProfiler,是开发人员和系统管理员在优化Java应用程序时的重要武器。JProfiler是一款功能强大的Java性能剖析器...无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的Java性能调优技能。
4. **Java性能调优**: - VisualVM支持JMX(Java Management Extensions),允许动态修改JVM参数,对于性能优化来说极其方便。 - 它还可以导出CPU和内存快照,用于离线分析,帮助开发者理解应用在特定时刻的资源...
11. **并发性能调优**:书中还会讨论如何监控和优化并发程序的性能,包括JVM的并发参数调整、线程池的配置以及并发工具的使用等。 通过学习《Java并发编程:设计原则与模式(第二版)》,开发者可以掌握Java并发...
5. **性能调优**:`hbase.client.operation.timeout`和`hbase.rpc.timeout`定义了操作和RPC超时时间,防止长时间阻塞。`hbase.region.split.policy`选择合适的分裂策略,如`ConstantSizeRegionSplitPolicy`或`...
Java性能管理系统是一个基于Java技术构建的应用程序,用于管理和优化软件系统的性能。在Java环境中,性能管理涉及监控、分析和调优多个层面,包括CPU使用率、内存管理、线程活动、垃圾回收、数据库连接以及网络I/O等...
数据库性能调优涉及SQL优化、索引调整、资源分配、查询缓存和配置参数调整等多个方面。 查询优化器分析和选择执行查询的最佳路径,以最大化性能,它是数据库管理系统的关键组件。 数据库连接池的配置和使用涉及...
7. **性能调优策略**:基于javapms的数据,我们可以采取以下调优策略: - **内存调优**:调整JVM的内存分配,优化新生代和老年代的大小。 - **线程优化**:合理设置线程池大小,避免过多线程导致的资源消耗。 - *...