企业java应用的性能调优是一项艰巨的、有时甚至是徒劳的任务,这是由现代应用的复杂性和缺少正规的调优方法导致的。现代企业应用与十年前的应用相比差距很大,如今这些应用支持多输入、多输出、复杂的框架和业务处理引擎。而十年之前,基于web的企业应用只是通过网络浏览器获得输入信息,然后与数据库或者遗留系统交互进行后台处理,最后把输出结果返回给浏览器(HTML)。现在,输入信息可以来自HTML浏览器、富客户端、移动设备或者网络服务,它可以跨越运行在不同架构下的servlets或者门户容器,这反过来又可能调用企业bean,外部web服务或者把处理委托给业务规则引擎。每一个这样的组件都可能与内容管理系统、缓存层、众多数据库和遗留系统交互。输出的信息通常以独立于展现层的形式保存,随后转化为HTML、XML、WML或者其他任意客户端需要的格式。现代应用比过去包含更多移动部分和“黑盒子”,这对性能调优提出了巨大的挑战。
除了复杂性提高,性能调优技术其艺术性要大于科学性,还因为大多数性能调优指南都侧重于性能指标,有时晦涩难懂,也可能影响用户体验。本文尝试把性能调优活动变成一种“科学”范畴内的行为,提供了一种可重用的关注用户体验的方法,利用“等待点”(也就是应用中引起某请求等待的部分)分析应用架构。总之,基于等待的调优方法允许性能工程师们通过优化用户体验快速实现可度量的性能提高。
性能调优过程
在详细介绍基于等待调优和等待点分析方法之前,本节首先对有效的性能调优过程做一个概述。性能调优可以简单的概括为四步:
1、负载测试
2、容器调优
3、应用调优
4、迭代
像大多数计算机科学一样,性能调优是一个迭代的过程。首先,创建一个合适的负载测试
,其中包含了均衡的、具有代表性的服务请求,这都是容器调优实践可以满足的。随着容器被不断调优和测试压力的增大,应用程序的瓶颈逐渐显现出来。随着应用的瓶颈被定位和解决,应用行为会发生变化,这就要求容器再次调优。在容器和应用之间的迭代过程会一直进行到性能到达可以接受的条件(或者直到项目已经到期必须发布时)。
负载测试方法
启动一个性能调优实践的先决条件是创建一整套合适的负载测试集合。每一个负载测试必须满足以下两点:
● 代表性,必须体现最终用户的业务场景(或期望的场景)
● 均衡性,必须符合最终用户不同行为的比例分配
也就是说,负载必须能够按照最终用户的实际操作比例来模拟用户动作。为了说明均衡最终用户动作的重要性,请看下面这个例子:在保险索赔部门,员工执行以下操作:
1、用户上午八点登陆系统。
2、上午每人平均处理五个索赔请求。
3、大约80%的用户忘记在吃饭之前注销账号,导致session过期。
4、午饭后,用户重新登录系统。
5、下午每人平均处理五个索赔申请。
6、下班之前生成两个报告。
7、80%的用户回家前注销账号。
这个例子是一个真实应用的简化版,但是它足够在这些服务请求建立一个平衡。这个场景展现的均衡是:两次登陆,十次索赔处理,两次报告和一次注销。
如果负载生成器把压力均匀分布在不同的服务请求上又会怎么样呢?在本例中,用户登陆和注销功能会接收与处理与理赔请求相同的负载。如果是1000个并发用户,登陆功能会很快崩溃,导致企业投资建立一个能够处理这种负载的登陆组件,而实际上这种负载根本不会发生。更糟糕的是,本例中由于最大的瓶颈看似存在于登陆功能上,所以调优的努力会侧重该功能,而忽视索赔处理功能。总之,一个非均衡的负载可能导致调优过程错误的关注于支持那些绝不会发生的负载的组件,而不是那些真正需要调优的部分!
判断一个负载对于应用是均衡的和代表性的标准,对于测试一个已存在的应用(或者一个新版本)还是一个全新的应用是不同的。
更多信息请查看 java进阶网 http://www.javady.com
分享到:
相关推荐
### Java性能调优知识点概述 #### 一、高性能Java代码编写原则 - **算法与数据结构**:选择合适的数据结构可以极大地提升程序运行效率。例如,对于查找操作频繁的场景,哈希表(如`HashMap`)比链表或数组更高效。...
Java性能调优是一种针对Java应用程序进行优化以提升其运行效率和响应速度的技术。现代企业级Java应用具有高度的复杂性,涉及多种输入源、多输出形式、复杂的框架和业务处理引擎,这使得调优变得尤为困难。过去,基于...
远程调试通常基于一种称为Java平台调试器架构(JPDA)的技术。JPDA提供了一套标准接口,使得调试工具能够与正在运行的Java应用程序交互。该架构主要由以下几个部分组成: - **Java虚拟机工具接口 (JVMTI)**:提供了...
本文将深入探讨“WAS性能调优对jvm、线程数、ORB大小的配置”这一主题。 首先,我们要理解JVM(Java Virtual Machine)在WAS中的作用。JVM是Java程序运行的平台,它的性能直接影响到应用的响应时间和资源利用率。在...
### 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并发...
Java性能管理系统是一个基于Java技术构建的应用程序,用于管理和优化软件系统的性能。在Java环境中,性能管理涉及监控、分析和调优多个层面,包括CPU使用率、内存管理、线程活动、垃圾回收、数据库连接以及网络I/O等...
数据库性能调优涉及SQL优化、索引调整、资源分配、查询缓存和配置参数调整等多个方面。 查询优化器分析和选择执行查询的最佳路径,以最大化性能,它是数据库管理系统的关键组件。 数据库连接池的配置和使用涉及...
5. **性能调优**:`hbase.client.operation.timeout`和`hbase.rpc.timeout`定义了操作和RPC超时时间,防止长时间阻塞。`hbase.region.split.policy`选择合适的分裂策略,如`ConstantSizeRegionSplitPolicy`或`...
7. **性能调优策略**:基于javapms的数据,我们可以采取以下调优策略: - **内存调优**:调整JVM的内存分配,优化新生代和老年代的大小。 - **线程优化**:合理设置线程池大小,避免过多线程导致的资源消耗。 - *...