如何进行Java EE性能测试与调优
- 格式:doc
- 大小:38.00 KB
- 文档页数:5
一、简介JavaEE(Java Platform, Enterprise Edition)是一种用于开发企业级应用的评台。
它提供了一系列的技术和API,用于构建大型、复杂的分布式系统。
本教程将介绍JavaEE企业级应用开发的基本概念、技术和最佳实践。
二、环境搭建1. 安装Java Development Kit(JDK):首先需要安装JDK,可以从Oracle全球信息站下载最新的JDK版本,并按照冠方指南进行安装。
2. 下载并配置JavaEE开发工具:可以选择Eclipse、NetBeans、IntelliJ IDEA等集成开发环境,然后安装相应的JavaEE插件。
3. 安装数据库:在开发JavaEE应用时,通常需要使用数据库。
可以选择MySQL、Oracle、PostgreSQL等数据库,并进行相应的安装和配置。
三、创建第一个JavaEE应用1. 创建一个新的JavaEE项目:在IDE中创建一个新的JavaEE项目,并选择适当的项目类型(如Servlet、JSP、EJB等)。
2. 编写代码:根据项目需求,编写相应的Java类、Servlet、JSP页面等。
3. 部署和运行:将项目部署到服务器上,并启动服务器,然后在浏览器中访问应用程序。
四、 JavaEE基础知识1. Servlet和JSP:介绍Servlet和JSP的基本概念、工作原理和使用方法。
2. EJB(Enterprise JavaBeans):介绍EJB的类型(Session Bean、Entity Bean、Message-Driven Bean)、生命周期和用法。
3. JPA(Java Persistence API):介绍JPA的基本概念、实体管理、查询语言等。
4. CDI(Contexts and Dependency Injection):介绍CDI的概念、注解、作用域等。
5. RESTful Web Services:介绍RESTful风格的Web服务的开发和使用。
如何进行性能调优性能调优是在软件开发过程中非常重要的一步,它可以提高软件的响应速度、资源利用率和整体性能。
本文将介绍几种常见的性能调优方法和技巧,帮助开发人员提升软件的性能。
一、代码优化1. 减少循环次数:在编写代码时,应尽量减少循环次数,避免不必要的重复计算。
可以通过使用缓存变量、优化数据结构等方式来实现。
2. 避免冗余计算:在代码中,经常会出现重复计算的情况。
可以通过缓存计算结果、提前计算等方式来避免冗余计算,提高程序运行效率。
3. 消除内存泄漏:内存泄漏是指程序未能正确释放不再使用的内存,导致内存占用过多,造成性能下降。
开发人员应注意及时释放不再使用的资源,防止内存泄漏问题的发生。
二、数据库优化1. 索引优化:在数据库中,索引是提高查询效率的关键。
可以通过合理地创建索引,避免全表扫描,提高查询效率。
2. 合理设计数据库表结构:数据库表结构的设计合理与否直接影响查询和操作的性能。
应尽量避免过多的冗余字段、不必要的联表查询等,避免影响数据库的性能。
三、缓存优化1. 使用缓存技术:将经常使用的数据缓存在内存中,可以减少对数据库频繁的访问,提高读取数据的效率。
2. 设置合理的缓存过期时间:缓存数据的过期时间应根据业务需求进行合理设置,避免数据更新不及时或者数据过期时间过长的问题。
四、网络优化1. 减少网络请求:网络请求通常是耗时较长的操作,可以通过合并请求、减少不必要的请求等方式来减少网络请求的次数。
2. 压缩数据传输:对于传输的数据,可以采用压缩算法进行压缩,在保证数据完整性的前提下,减小传输的数据量,提高传输效率。
五、硬件优化1. 使用高性能的硬件设备:在部署软件时,应尽量选择性能较高的硬件设备,如高频率的CPU、大内存、SSD硬盘等,以提升整体性能。
2. 合理分配硬件资源:对于多个部署在同一台服务器上的应用,应合理分配硬件资源,避免资源竞争导致的性能下降。
总结:性能调优是软件开发过程中的重要环节,可以提高软件的响应速度和整体性能。
《Java性能调优指南》随着互联网的飞速发展,Java作为一种重要的编程语言,被越来越广泛地应用于各个领域。
但是,Java程序的性能问题也随之出现。
如何调优Java 程序的性能,成为了每个开发人员需要解决的难题。
本文将为大家介绍Java性能调优的指南。
一、JVM参数设置JVM(Java虚拟机)参数设置是Java性能调优的关键。
JVM有众多的参数,不同的参数设置会对Java程序的性能产生不同的影响。
常用的JVM参数设置包括以下几个方面:1. 内存设置内存是Java程序的一大瓶颈。
如果内存设置不合理,会导致Java程序频繁地进行垃圾回收,造成程序的延迟和不稳定。
在设置内存参数时需要注意以下几点:- -Xmx: 最大堆内存,设置合理的最大堆内存大小可以减少JVM的垃圾回收次数,提高程序性能。
- -Xms: 初始堆内存,设置合理的初始堆内存大小可以加快程序启动时间,提高程序性能。
- -XX:NewRatio: 新生代与老年代的比例,如果设置得当,可以减少垃圾回收的次数。
通常新生代的大小为总堆容量的1\/3或1\/4,老年代的大小为总堆容量的2\/3或3\/4。
2. 垃圾回收设置垃圾回收是Java程序中必不可少的一部分。
合理的垃圾回收参数设置可以提高程序性能。
常用的垃圾回收参数设置包括以下几点:- -XX:+UseParallelGC: 使用并行GC,适用于多核CPU。
- -XX:+UseConcMarkSweepGC: 使用CMS GC,适用于大型Web应用程序。
- -XX:+UseG1GC: 使用G1 GC,适用于大内存应用程序。
3. JIT设置JIT(即时编译器)是Java程序中非常重要的一部分。
合理的JIT参数设置可以提高程序的性能。
常用的JIT参数设置包括以下几点:- -XX:+TieredCompilation: 启用分层编译,可以提高程序启动时间和性能。
- -XX:CompileThreshold: JIT编译阈值,设置JIT编译的最小方法调用次数,可以提高程序性能。
基于JavaEE的企业信息化系统设计与性能优化企业信息化系统是企业管理的重要工具,通过信息技术的应用,可以提高企业的管理效率、降低成本、提升竞争力。
在当今数字化时代,JavaEE作为一种广泛应用于企业级应用开发的技术框架,具有良好的跨平台性、安全性和可扩展性,因此被广泛应用于企业信息化系统的开发中。
本文将从设计和性能优化两个方面探讨基于JavaEE的企业信息化系统。
企业信息化系统设计系统架构设计在设计企业信息化系统时,首先需要考虑系统的架构设计。
JavaEE提供了一套完整的分层架构,包括表示层、业务逻辑层和持久层。
在设计时,可以采用MVC(Model-View-Controller)模式,将系统分为模型层、视图层和控制层,实现数据、展示和控制的分离,提高系统的可维护性和扩展性。
数据库设计数据库设计是企业信息化系统设计中至关重要的一环。
在设计数据库时,需要考虑数据表的规范化、索引的优化以及数据表之间的关联关系。
合理的数据库设计可以提高系统的数据存储效率和查询性能,减少数据冗余和数据不一致性问题。
业务流程设计企业信息化系统通常涉及多个部门和多个业务流程,因此在设计时需要充分考虑各个部门之间的协作关系和业务流程之间的交互。
可以借助BPM(Business Process Management)工具对业务流程进行建模和优化,提高系统的运行效率和管理水平。
系统性能优化代码优化在开发JavaEE企业信息化系统时,需要注意代码质量和性能。
可以通过代码重构、减少循环嵌套、合理使用缓存等方式来优化代码,提高系统的执行效率和响应速度。
数据库优化数据库是企业信息化系统中存储数据的核心组件,因此数据库的性能对整个系统的性能影响巨大。
可以通过合理设计数据库索引、定期清理无用数据、使用数据库连接池等方式来优化数据库性能,提高数据读写效率。
系统监控与调优为了保证企业信息化系统稳定运行并及时发现问题,需要建立完善的系统监控机制。
如何进行代码的动态分析和性能调优代码的动态分析和性能调优是软件开发的重要环节,可以帮助我们找到潜在的问题和提升程序的运行效率。
本文将介绍代码的动态分析和性能调优的基本概念和常用方法。
一、动态分析动态分析是通过运行程序实际观察程序的行为和性能表现,以发现潜在的问题和改进空间。
常见的动态分析方法包括:1.代码调试:通过调试工具,可以逐步执行代码,观察变量的值,跟踪函数调用的堆栈信息,以发现代码中的错误和问题,例如内存泄漏、变量赋值错误等。
2.单元测试:编写验证代码正确性的测试用例,并且可以通过工具进行自动化测试。
可以测试代码逻辑是否正确,边界值是否考虑周全等。
3.性能测试:通过在生产环境或者测试环境中模拟负载,对程序进行性能测试。
可以测量程序在不同负载下的响应时间、吞吐量等性能指标,以找出性能瓶颈。
4.代码覆盖率测试:通过工具统计代码的覆盖率,即哪些代码被执行了,哪些没有被执行。
可以发现代码中的死代码和冗余代码,优化测试用例的覆盖率。
二、性能调优性能调优是通过分析程序的瓶颈和性能问题,并进行相应的改进措施,以提高程序的响应速度、吞吐量和资源利用率等。
下面介绍几种常见的性能调优方法:1.代码优化:通过改进代码的算法、数据结构和编写方式,减少计算量和内存开销。
例如使用更高效的排序算法、使用缓存来减少对数据库的访问等。
2.并发优化:对于多线程或多进程的程序,可以通过合理的线程/进程管理和同步机制,提高并发性能。
例如减少锁的使用、充分利用多核处理器等。
3.数据库优化:对于数据库应用程序,可以通过调整数据库的表结构、索引和查询语句等,以提高数据库的读取和写入性能。
例如合理选择索引、避免全表扫描等。
4. IO优化:如果程序有大量的磁盘或网络IO操作,可以通过采用异步IO、批量读写、数据压缩等方式,减少IO的次数和延迟,提高程序的性能。
5.内存优化:通过合理的内存管理和调整程序的内存使用,减少内存开销。
例如使用对象池、循环复用资源等,避免频繁的分配和释放内存。
java项目测试流程Java项目测试是软件开发中非常重要的环节,它确保了软件质量和稳定性。
本文将介绍Java项目测试的流程和步骤,以及一些常用的测试工具和技术。
一、测试准备阶段在开始测试之前,我们需要进行一些准备工作。
首先,测试团队需要全面了解项目的需求和功能,并和开发团队进行沟通,明确测试的范围和目标。
然后,测试团队需要编写测试计划和测试用例,以确保测试的全面性和准确性。
测试计划中包括测试的时间安排、测试环境的搭建和测试资源的准备等。
二、单元测试阶段单元测试是Java项目测试的第一阶段,它主要测试项目中的各个模块和单元的功能是否正常。
在进行单元测试时,测试团队需要编写针对每个模块和单元的测试用例,并使用JUnit等单元测试框架进行测试。
通过单元测试,我们可以快速发现和修复代码中的bug,确保项目的稳定性。
三、集成测试阶段在单元测试通过后,我们需要进行集成测试。
集成测试是测试项目中不同模块之间的交互和整体功能是否正常。
在进行集成测试时,测试团队需要编写针对不同模块之间的接口和交互的测试用例,并使用JUnit等测试框架进行测试。
通过集成测试,我们可以确保不同模块之间的协作正常,项目的整体功能正常。
四、系统测试阶段系统测试是对整个Java项目的功能和性能进行测试。
在进行系统测试时,测试团队需要编写针对整个项目的测试用例,并使用Selenium等自动化测试工具进行测试。
系统测试主要包括功能测试、性能测试和兼容性测试等。
通过系统测试,我们可以发现和修复项目中的潜在问题,确保项目的质量和稳定性。
五、验收测试阶段验收测试是最后一个测试阶段,也是用户确认项目交付的阶段。
在进行验收测试时,测试团队需要模拟用户的使用场景,并进行全面的测试。
通过验收测试,我们可以确保项目满足用户的需求和期望,并且符合预期的质量要求。
六、性能测试阶段性能测试是对Java项目的性能进行评估和测试的阶段。
在进行性能测试时,测试团队需要模拟项目的实际使用场景,并使用JMeter等性能测试工具进行测试。
软件研发如何进行性能优化和调优软件研发是现代社会中一项重要的技术领域,而性能优化和调优是提高软件质量和用户体验的关键。
本文将介绍软件研发过程中的性能优化和调优方法,以帮助开发人员更好地提升软件的性能。
一、代码优化代码优化是性能优化的重要手段之一。
通过对代码进行优化,可以提高软件的运行效率和响应速度。
1. 选择合适的算法和数据结构:在软件设计阶段,应选择适合当前问题场景的最优算法和数据结构。
例如,在查找操作频繁的场景中,选择哈希表而不是线性查找可以大大提高性能。
2. 减少资源消耗:合理利用计算机资源是性能优化的关键。
减少内存占用、减少磁盘读写操作、合理使用CPU等资源可以提高软件性能。
可以通过减少不必要的对象创建、使用索引优化数据库查询等方法来实现。
3. 编写高效的代码:编写高效的代码可以提高软件的执行效率。
例如,避免不必要的循环嵌套、减少函数调用次数、避免过多的动态内存分配等。
二、并发处理当软件需要处理大量并发请求时,合理的并发处理机制可以提升软件的性能。
以下是一些优化并发处理的方法:1. 多线程并发:使用多线程可以将任务分解为多个并发执行的子任务,提高软件的并发处理能力。
但是需要注意线程间的通信和同步,以避免出现死锁和竞争条件。
2. 缓存机制:合理利用缓存可以有效减轻数据库负载或者减少网络请求。
将常用的数据缓存到内存中,可以大大提高软件的响应速度。
3. 消息队列:使用消息队列将请求分发给多个消费者进行处理,可以减少请求的处理时间,提高系统的吞吐量和响应能力。
三、数据库优化数据库是软件开发中频繁使用的关键组件之一,对数据库的优化可以提高软件的性能和稳定性。
1. 索引优化:为经常需要查询的字段添加索引,可以提高查询速度。
但是索引的过多使用会增加写操作的开销,需要权衡使用。
2. SQL优化:优化SQL查询语句可以减少数据库负载和提高查询速度。
避免使用不必要的JOIN操作、充分利用索引、合理设置查询条件等。
掌握JAVA中的机器学习模型评估与调优的方法与策略引言:机器学习在如今的科技领域中扮演着越来越重要的角色。
它的应用范围广泛,包括图像识别、语音识别、自然语言处理等等。
而在机器学习中,模型评估与调优是一个至关重要的环节。
本文将介绍如何在JAVA中掌握机器学习模型评估与调优的方法与策略。
一、模型评估方法1.1 训练集与测试集划分在机器学习中,我们通常将数据集划分为训练集和测试集。
训练集用于模型的训练,测试集用于评估模型的性能。
在JAVA中,我们可以使用一些库如Weka、DL4J等来进行数据集的划分。
1.2 交叉验证交叉验证是一种常用的模型评估方法。
它将数据集划分为k个子集,然后依次将其中一个子集作为测试集,剩余的k-1个子集作为训练集进行模型训练和评估。
最后将k次评估结果的平均值作为模型的性能指标。
在JAVA中,可以使用Weka 库中的交叉验证方法来进行模型评估。
1.3 ROC曲线与AUC指标ROC曲线是一种常用的二分类模型评估方法。
它以假阳性率(False Positive Rate)为横轴,真阳性率(True Positive Rate)为纵轴,绘制出一条曲线。
曲线下的面积(AUC)越大,说明模型的性能越好。
在JAVA中,可以使用Weka库中的ROC曲线绘制方法来进行模型评估。
二、模型调优策略2.1 特征选择特征选择是指从原始数据中选择出最具有代表性的特征,以提高模型的性能。
在JAVA中,可以使用Weka库中的特征选择方法来进行特征选择。
2.2 参数调优参数调优是指通过调整模型中的参数来提高模型的性能。
在JAVA中,可以使用Weka库中的网格搜索方法来进行参数调优。
网格搜索会遍历给定的参数组合,并通过交叉验证来评估每个参数组合的性能,最后选择性能最好的参数组合作为最终的模型。
2.3 集成学习集成学习是指将多个模型的预测结果进行组合,以提高模型的性能。
在JAVA 中,可以使用Weka库中的集成学习方法如Bagging、Boosting等来进行模型的集成。
如何进行代码的性能测试和优化代码的性能测试和优化是软件开发过程中非常重要的一环,它可以帮助开发人员找出程序的瓶颈并提升其处理效率。
本文将介绍一些常用的性能测试和优化方法,帮助开发人员提高代码的性能。
一、性能测试方法1.基准测试(Benchmarking)基准测试是通过运行已知输入集合的程序,从而对不同算法、数据结构和实现进行比较。
它可以帮助确定哪个实现更高效,并提供了对性能改进的基准。
2.负载测试(Load Testing)负载测试用于评估系统在不同负载条件下的性能。
通过模拟并发用户,开发人员可以查看系统在压力下的表现,并找出处理问题的瓶颈。
3.压力测试(Stress Testing)压力测试是在极限条件下测试系统的性能。
通过增加负载和资源需求,开发人员可以找到系统的极限,并检查它在极限情况下的响应时间和稳定性。
4.并发测试(Concurrency Testing)并发测试用于测试系统在并发访问时的表现。
通过模拟多个并发用户或线程访问系统,开发人员可以查看系统在并发情况下的性能,并找出任何竞争条件导致的问题。
5.断言测试(Assertion Testing)断言测试用于确保程序在满足特定条件时的表现符合预期。
开发人员可以插入断言语句来验证代码的正确性并捕获可能的问题。
6.时间性能测试(Timing Performance Testing)时间性能测试是通过在代码中插入计时器来测量代码段的执行时间。
通过比较不同实现或不同算法的执行时间,开发人员可以找到程序的性能瓶颈并进行优化。
二、代码优化方法1.算法优化选择合适的算法可以显著提升程序的性能。
例如,使用快速排序而不是冒泡排序,可以大大减少排序的时间复杂度。
2.数据结构优化使用高效的数据结构可以提升程序的性能。
例如,使用哈希表而不是线性搜索可以加快搜索速度。
3.缓存优化合理利用缓存可以减少内存访问次数,提高程序的性能。
例如,通过重复利用缓存中的数据来避免重复计算。
性能测试的目标性能测试不同于功能测试,不是对与错的检验,而是快与慢的衡量。
在进行真正的性能测试之前要先搞清楚目标:1. 在确定的硬件条件下,可以支持的并发数越大越好,响应时间越快越好。
具体需要达到的并发数是多大,要求的响应时间是多快,由产品经理来提出。
2. 在确定的硬件条件下,测试得到最大并发数和相应的响应时间之后。
如果增加硬件投入,可以得到怎样的性能提升回报?(系统扩展性和伸缩性测试,Scalability)这里的硬件条件包括:cpu,memery,I/O,network bandwidth。
性能测试中的基准测试Benchmarking与功能测试相似,性能测试也要设计测试用例,不同的是在正式开始你的业务测试用例之前你要先进行一下基准测试。
为什么呢?其实就是先要量一下你的硬件的能力,不然,如果你的测试结果不好,你怎么知道是硬件慢还是你的软件的问题。
这些硬件测试包括:1. 网络带宽测试,你可以通过copy大文件的方式测试你的网络的最大带宽是多少。
2. cpu,你可以利用比较复杂的算法来衡量cpu的快慢3. memery,这个不用测试,你知道memery的大小4. IO,也可以通过copy大文件来测试这些基准测试用例在后面的调优过程中,还可以用来衡量你修改之后真的变好了吗。
设计你的业务测试用例比较理想的测试用例就是要尽可能模仿真实世界的情况,这往往做不到,尤其是对于新产品来说。
你可以先录制一些用户最常用,最典型的case作为起点。
另外,对于并发的概念需要搞清楚。
并发用户,通常是指同时在线的用户,这些用户可以能在用你的系统的不同的功能,注意并不是说大家都在做同一件事情。
对某一个事务并发请求是指某一个request的并发调用。
对于后一种并发,你往往需要计算在用户量最大的时候,大概大家都集中的在干哪一件事情,这个请求一定要够快才好。
设计好这两种测试用例以后,在后面的调优过程中,他们就成了衡量你的改进的成效的衡量的标尺。
性能调优性能调优要从底层开始,基本上要从OS开始,到JVM,Cache,Buffer Pool,SQL,DB Schema,算法。
一次不要改的太多,改一点,测一下,这可是个慢功夫,需要有耐心。
在执行测试的时候还要注意,要遵循相同的过程,系统需要在重启之后先热身再开始真正的测试,不然你会发现你的测试结果很不一样,琢磨不定。
还有,要注意你的客户端的能力,比如JMeter,很需要内存,别因为客户端不行,误以为是你的系统的问题,那就太乌龙了。
在测试调优的时候,需要借助一些监控工具比如JConsole,来监控系统的状况,找到系统的瓶颈,所谓瓶颈,就是最慢的那个部分,也常表现为100%被占满。
比如你的内存或者cpu被用尽了。
如果cpu和内存还没有用尽,说明他们在等某个资源。
这时候需要用profile 工具去寻找,比如JProfile,YourKit。
利用性能监控日志因为性能的问题不是很容易重现,当product环境中遇到性能问题的时候,如果是数据的问题,也许当你把product 数据copy到你的测试环境中,就能重现比较慢点查询,加以改进。
但是如果是并发用户或者网络等运行时环境的问题,你就很难重现。
这时,如果你能通过日志看到那些关键的响应慢的方法,也许可以帮助你快点找到问题所在。
下面的代码可以帮你做到这一点,仅供参考:1import org.slf4j.Logger;23public class TraceUtil {4final Logger logger;5final long threshold = 1000;6private long begin;7private long offtime = 0;8private String threadInfo;9private String targetId;1011public TraceUtil(Logger logger, Thread thread, String targetId, long begin) {12this.logger = logger;13this.threadInfo = thread.getId() + "-" + thread.toString();14this.targetId = targetId;15this.begin = begin;16}1718public void trace(String targetEvent) {19long duration = System.currentTimeMillis() - begin;20long increment = duration - offtime;21offtime = duration;22float percentage = (float) increment / (float) duration * 100;23if (duration > threshold && percentage > 20) {24logger.error(25"Response time is too large: [{}], {}/{} ({}), {}, {}",26new String[] { threadInfo + "", increment + "",27duration + "", percentage + "%", targetEvent,28targetId });29}3031}3233}利用JVM的MXBean找到blocked的点当你发现JVM占用的cpu很高,而且响应时间比较慢,很可能是被IO或者网络等慢速设备拖住了。
也有可能是你的方法中某个同步点(同步方法或者对象)成为性能的瓶颈。
这时候你可以利用JVM提供的monitor API来监控:34<%@ page import="ng.management.*, java.util.*" %>35<%!36Map cpuTimes = new HashMap();37Map cpuTimeFetch = new HashMap();38%>3940<%41out.println("Threads Monitoring");42long cpus = Runtime.getRuntime().availableProcessors();43ThreadMXBean threads = ManagementFactory.getThreadMXBean();44threads.setThreadContentionMonitoringEnabled(true);45long now = System.currentTimeMillis();46ThreadInfo[] t = threads.dumpAllThreads(false, false);47for(int i = 0; i < t.length; i++) {48long id = t[i].getThreadId();49Long idObj = new Long(id);50long current = 0;51if(cpuTimes.get(idObj) != null) {52long prev = ((Long) cpuTimes.get(idObj)).longValue();53current = threads.getThreadCpuTime(t[i].getThreadId());54long catchTime = ((Long) cpuTimeFetch.get(idObj)).longValue();55double percent = (double)(current - prev) / (double)((now - catchTime) * cpus * 1000);56if (percent > 0 && prev > 0) {57out.println("<li>"+ t[i].getThreadName()+"#"+t[i].getThreadId() + " Time: "+ percent + " ("+ prev + ", "+ current + ") ");58String locked = t[i].getLockInfo()==null?"":t[i].getLockInfo().getClassName();59out.println(" Blocked: ("+ t[i].getBlockedTime() + ", "+ t[i].getBlockedCount() + ", "+ locked + ")</li>");60}61}62cpuTimes.put(idObj, new Long(current));63cpuTimeFetch.put(idObj, new Long(now));64}65%>同步是性能的一大瓶颈通过监控发现,大量线程block在一个同步方法上,这样cpu也使不上劲。
当你发现性能上不去,IO和网络等慢速设备也不是问题的时候,你就得检查一下是否在某个关键点上使用了同步(synchronizae)。
有时候也许是你应用的第三方的jar里面的某个方法是同步的,这种情况下,你就很难找到问题所在。
只能在编写代码的时候看一下你引用的方法是否是同步的。
参考阅读1. Java run-time monitoring 系列文章,比较系统的讲解了jvm的监控2. Performance Tuning the JVM for Running Tomcat:本文列举了tomcat性能相关的几个关键的jvm 参数3. 一本系统讲解Java性能的书:Java Performance4. insideApps,一个事务级别的JavaEE的性能监控开源软件。
它希望可以寄存在product环境中,在不影响系统性能的前提下,监控和分析产品的性能。
想法很不错。
5. ManageEngine,一个很强大的监控软件,有免费版。
原文链接:/4445779/794813。