### JAVA性能测试与调优案例 #### 一、概述 本文档主要介绍了JAVA应用程序的性能测试及调优方法,覆盖了从JDK选择、JVM配置优化、Tomcat服务器调优到具体应用层面(如JSP、Servlet)的优化策略。通过对实际案例的分析与实践,旨在帮助开发人员提升系统的整体性能。 #### 二、JDK优化 **1. 如何修改默认Java调用的JVM.dll版本** Java虚拟机(JVM)有两种版本:client和server。其中,client版本适用于桌面应用,具有较快的启动速度;而server版本则更适用于服务器应用,虽然启动较慢但运行速度快。默认情况下,Java会根据不同的应用场景自动选择合适的版本。如果需要手动指定,则可以通过修改`jvm.cfg`文件来实现。 - **步骤**: - 打开`%JAVA_HOME%\jre\lib\i386\jvm.cfg`文件。 - 将`-serverKNOWN`移动至文件的第一行。 - 文件内容应为: ``` -serverKNOWN -clientKNOWN -hotspotALIASED_TO-client -classicWARN -nativeERROR -greenERROR ``` - 保存并重启Java服务。 通过这种方式可以确保Java程序使用server版本的JVM,从而获得更好的性能表现。 **2. 测试实例** 为了验证不同JVM版本对系统性能的影响,进行了以下测试: - **测试环境**:Tomcat 5.5.28 + JDK 1.6.0_13 - **测试应用程序**:jpetstore5 - **测试目的**:比较client与server版本JVM在性能上的差异 - **测试场景**:包括访问主页、登录、浏览商品等操作 - **测试结果**:结果显示,在大多数事务的平均响应时间上,client版本的JVM略优于server版本。 #### 三、JVM调优 **1. 垃圾收集与Java堆优化** Java堆是JVM管理的一部分,用于存储对象实例。合理配置垃圾回收机制对于提高系统性能至关重要。 - **调整堆大小**:通过设置`-Xmx`和`-Xms`参数来指定最大和初始堆空间大小。 - **选择垃圾回收器**:JVM提供了多种垃圾回收器,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和 G1等,可根据应用需求选择适合的回收器。 - **调优参数**:例如,使用`-XX:+UseParNewGC`启用并行垃圾回收器,或使用`-XX:+UseConcMarkSweepGC`启用CMS垃圾回收器。 **2. 内存使用调整** - **解决OutofMemoryError**:当Java堆内存不足时,系统会抛出此异常。可通过增加堆大小或优化代码减少内存消耗来解决。 - **连接线程数调整**:通过调整`maxThreads`和`minSpareThreads`等参数来优化连接池中的线程数量,减少资源浪费。 #### 四、Tomcat性能监控与优化 **1. 监控** - **Tomcat监控页面**:通过配置,可以在浏览器中查看Tomcat的运行状态。 - **JMX监控**:Java Management Extensions (JMX) 提供了一种管理Java应用程序的方式,可用来监控Tomcat的各种指标。 **2. 性能优化** - **内存使用调整**:调整Tomcat的内存配置,避免出现内存溢出问题。 - **连接线程数调整**:优化Tomcat的连接器设置,减少连接失败的可能性。 - **连接超时时间**:通过设置`connectionTimeout`参数来管理空闲连接的超时时间。 - **最大排队数**:通过`acceptCount`参数限制连接请求队列的最大长度。 - **使用Tomcat Native Library**:该库提供了一些原生功能的支持,如Apache APR,可进一步提升Tomcat的性能。 #### 五、Oracle性能监控与优化 **1. 监控方法** - **使用LoadRunner Controller**:通过配置,可以监控Oracle数据库的性能指标。 - **使用SiteScope**:这是一种Web监控工具,可用于监控Oracle数据库。 - **使用Oracle企业管理器**:提供了图形化的界面来查看数据库性能。 - **使用Spotlight**:这是一个实时监控工具,可以显示数据库活动的详细信息。 **2. 计数器** - **sorts(disk)(V$SYSSTAT)**:表示磁盘排序的数量。 - **sort(memory)(V$SYSSTAT)**:表示内存中排序的数量。 - **dbblockgets(V$SYSSTAT)**:表示从数据块获取的数据量。 - **parsecount(hard)(V$SYSSTAT)**:表示硬解析的数量。 - **CPUusedbythissession(V$SYSSTAT)**:表示当前会话使用的CPU时间。 **3. 跟踪诊断和优化SQL语句** - **使用Oracle的Explain Plan**:可以查看SQL语句的执行计划,帮助诊断性能问题。 - **使用AWR报告**:Automatic Workload Repository (AWR) 可以生成详细的性能报告。 - **SQL Trace**:记录SQL语句的执行细节,帮助定位问题。 **4. Oracle索引问题诊断与优化** - **分析索引统计信息**:通过`DBMS_STATS`包获取索引的统计信息,检查索引的有效性。 - **重建索引**:对于频繁更新的数据表,定期重建索引可以改善查询性能。 #### 六、JSP、Servlet性能优化 **1. Servlet性能优化** - **利用init()方法进行高速缓存**:在Servlet初始化时,可以预加载数据到缓存中。 - **Servlet压缩输出**:通过gzip压缩技术减少网络传输数据量。 **2. JSP性能优化** - **选择正确的页面包含机制**:使用适当的include指令可以提高页面加载速度。 - **屏蔽PageSession**:减少不必要的Session创建和销毁操作。 - **控制Session的时间**:适当设置Session的过期时间,避免占用过多资源。 #### 七、Java代码性能监控与性能问题定位 **1. 内存泄漏检测** - **使用工具**:如VisualVM、JProfiler等,可以帮助定位内存泄漏问题。 - **分析堆转储文件**:通过生成heap dump文件,分析内存使用情况。 **2. JVM性能瓶颈** - **分析JVM启动参数**:了解每个参数的作用,合理配置以提升性能。 - **识别内存泄漏实例**:包括PermGen溢出、Heap溢出等问题,并通过工具进行跟踪和诊断。 **3. 日志性能优化** - **使用log4j**:合理配置日志级别和输出格式,减少日志产生的性能损耗。 #### 八、其他性能问题 **1. 线程死锁** - **预防措施**:遵循良好的编程习惯,如按照固定顺序获取锁,避免嵌套锁定等。 - **诊断工具**:使用JConsole等工具诊断死锁问题。 **2. 线程竞争** - **同步机制**:合理使用synchronized关键字或Lock接口来保护共享资源。 - **非阻塞算法**:使用原子类或并发集合框架中的类来减少线程间的竞争。 **3. 算法效率** - **复杂度分析**:评估算法的时间和空间复杂度,选择最合适的算法。 - **代码重构**:简化复杂的逻辑,减少不必要的计算。 通过以上介绍,可以看出JAVA性能测试与调优是一个综合性的过程,涉及多个方面和技术。开发者需要根据实际情况灵活运用各种工具和技术,才能有效地提升应用程序的整体性能。























剩余84页未读,继续阅读

- BrandWarrior2013-01-01好文章,很实际的讲了java的调优,怪不得要这么多分

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 随书光盘的有效管理及网络阅览实现技术-管理现状.docx
- 园林景观设计软件.docx
- 文化人类学-计算机科学与技术--常向阳.doc
- 浅析计算机软件技术在化工设计中的应用.docx
- IMS与网络融合技术研究分析tzq.doc
- 计算机技术在教育中的多方应用.docx
- 基于单片机的水温自动控制系统方案设计书.doc
- 浅析互联网金融模式.docx
- ppt模板:蓝色简约风人工智能PPT模板.pptx
- 大学计算机基础教程试题库专业证书.doc
- 基于物联网的智能仓储系统的设计.docx
- 计算机网考最新修改版.doc
- 电子商务税收征管问题分析及对策思考.doc
- Splunk大数据分析实战指南
- 面向对像程序设计试卷.doc
- C单片机的旋转显示屏设计与实现.doc


