`
bqw_5189
  • 浏览: 32357 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[转]一种非常简单的性能优化方法

阅读更多
感谢:http://www.weblogicfans.net/viewthread.php?tid=388&extra=page%3D1
http://wakemorpheus.blog.163.com/blog/static/12621953420099101067251/
一种非常简单的性能优化方法 最近我在帮助一个客户对应用程序进行性能调优,该应用程序的CPU占用量高得不可思议。他们计划从另一种产品迁移到WebLogic Express上,但是令他们吃惊的是,WebLogic Express下的CPU占用量要远远高于他们原本使用的产品。
我们以优先级的顺序列出了各种性能调优参数,试图解决问题。列在上面的是我所认为的简单参数。对于这些参数,我们公认应该设一个特定的值为最大值,而不会造成任何可能的负面影响。头两个参数是JSPPage Check Secs和Servlet Reload Check Secs。它们的默认值是1,这表示WebLogic每一秒钟都针对每个JSP页面和servlet进行检查,看是否有新的版本。这在开发时是一个很好的设置,但是在生产中,如果系统有大量的JSP页面和servlet,这将会造成巨大的开销。
如果您的生产系统从来不动态更新JSP页面和servlet的话,这两个参数应该设置为 -1,这表示WebLogic从不检查新页面。如果您需要更改JSP页面和servlet的话,可以将这两个参数设置为一个比较大的数,比如180,以减少检查新版本对系统的影响。
将客户机应用程序的这两个参数设为 -1可以使CPU占用量减少一半。只需更改一下参数,就可以获得巨大的好处,的确是一种非常简单的性能优化方法。

评论

老实说,WebLogic本来应该具备足够的智能,可以在运行于生产环境中时设置更为合理的默认值,或者至少在这种情况下应该在日志文件中给出警告。呵呵。
另外,这里有更多关于JSP再编译的信息。


weblogic服务器性能调优

在下面做的介绍都是以Weblogic8.1为例的,其它版本的Weblogic可能会有些许不同。
1) 设置JAVA参数;

  a) 编辑Weblogic Server启动脚本文件;

   BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh on Unix)
   BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix)

  b) 编辑set JAVA_OPTIONS命令,如:set JAVA_OPTIONS=-Xms256m –Xmx256m;
  c) 保存,重启即可。
  注:在WebLogic中,为了获得更好的性能,BEA公司推荐最小Java堆等于最大Java堆。

2) 开发模式 vs. 产品模式;
开发模式和产品模式的一些参数的默认值不同,可能会对性能造成影响,下面是对性能有影响的参数列表:
参数                              开发模式默认值              产品模式默认值
---------------------------------------------------------------------------------
Execute Queue: Thread Count        15 threads                  25 threads
JDBC Connection Pool: MaxCapacity  15 connnections             25 connections

  通过启动管理控制台,在域(如:mydomain)> 配置 > 常规选择产品模式。

3) 尽量开启本地I/O;

通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> 配置 > 调整选择启用本地I/O。

注:此值也可通过手动的修改config.xml配置文件。

4) 调优执行队列线程;

a) 修改默认执行线程数

   在这里,执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好,应该恰到好处的去设置它,太小了,执行

队列中将会积累很多待处理的任务,太大了,则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为25个执行线程。
   为了设置理想的执行队列的线程数,我们可以启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> 监视 >

性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数,据此确定理想的数值。
   理想的默认执行线程数是由多方面的因素决定的,比如机器CPU性能、总体体系架构、I/O、操作系统的进程调度机制、JVM的线程调度机制

。随着CPU个数的增加,WebLogic可以近乎线性地提高线程数。线程数越多,花费在线程切换的时间也就越多;线程数越小,CPU可能无法得到

充分的利用。为获取一个理想的线程数,需要经过反复的测试。在测试中,可以以25*CPU个数为基准进行调整。当空闲线程较少,CPU利用率较

低时,可以适当增加线程数的大小(每五个递增)。对于PC Server和Windows 2000,则最好每个CPU小于50个线程,以CPU利用率为90%左右为

最佳。
   通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> Execute Queue > weblogic.kernel.Defalt > 配

置中修改线程计数。

b) 设定执行队列的溢出条件;
   Weblogic Server提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能,当满足此溢出条件时,服务器改变其状态为“警

告”状态,并且额外的再分配一些线程去处理在队列中的请求,而达到降低队列长度的目的。
   通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> Execute Queue > weblogic.kernel.Defalt > 配

置下面几项:
   队列长度:此值表示执行队列中可容纳的最大请求数,默认值是65536,最后不要手动改变此值。
   队列长度阈值百分比:此值表示溢出条件,在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。
   线程数增加:当检测到溢出条件时,将增加到执行队列中的线程数量。如果CPU和内存不是足够的高,尽量不要改变默认值“0”。因为

Weblogic一旦增加后不会自动缩减,虽然最终可能确实起到了降低请求的作用,但在将来的运行中将影响程序的性能。
   最大线程数:为了防止创建过多的线程数量,可以通过设定最大的线程数进行控制。

在实际的应用场景中,应根据具体情况适当的调整以上参数。

c) 设定执行队列监测行为
  Weblogic Server能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作,也无法再执行新请求

。如果执行队列中的所有执行线程都变为“阻塞”状态,Weblogic server可能改变状态为“警告”或“严重”状态。如果Weblogic server变

为“严重”状态,可以通过Node Manager来自动关闭此服务器并重新启动它。具体请参考:Node Manager Capabilities文档。
   通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)>配置 > 调整下可配置下面几项:
   阻塞线程最长时间:在此服务器将线程诊断为阻塞线程之前,线程必须连续工作的时间长度(秒)。默认情况下,WebLogic Server 认为线程

在连续工作 600 秒后成为阻塞线程。
   阻塞线程计时器间隔:WebLogic Server 定期扫描线程以查看它们是否已经连续工作了 "阻塞线程最长时间" 字段中指定的时间长度的间隔

时间(秒)。默认情况下,WebLogic Server 将此时间间隔设置为 600 秒。

5) 调优TCP连接缓存数;

WebLogic Server用Accept Backlog参数规定服务器向操作系统请求的队列大小,默认值为50。当系统重载负荷时,这个值可能过小,日志中报

Connection Refused,导致有效连接请求遭到拒绝,此时可以提高Accept Backlog 25%直到连接拒绝错误消失。对于Portal类型的应用,默认值往

往是不够的。Login Timeout和SSL Login Timeout参数表示普通连接和SSL连接的超时时间,如果客户连接被服务器中断或者SSL容量大,可以尝

试增加该值。

通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)>配置 > 调整下可配置“接受预备连接”。

6) 改变Java编译器;

标准的Java编译器是javac,但编译JSP servlets速度太慢,为了提高编译速度,可以使用sj或jikes编译器取代javac编译器。下面说说更改

Java编译器:

通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)>配置 > 常规下改变Java 编译器,默认为javac。输入

完整路径,如:c:\visualcafe31\bin\sj.exe。然后打开高级选项,在预规划到类路径填写编译 Java 代码时为 Java 编译器类路径预规划的

选项,如:BEA_HOME\jdk141_02\jre\lib\rt.jar。

7) 使用Webogic Server集群提高性能;

具体关于如何配置Weblogic集群,我就不细说了。详情可参考:Introduction to WebLogic Server Clustering。

8) Weblogic EJB调优

由于EJB2.0已经很少项目在用了,EJB3.0再成熟一点,我再补充这一部分吧!

9) JDBC应用调优

JDBC Connection Pool的调优受制于WebLogic Server线程数的设置和数据库进程数,游标的大小。通常我们在一个线程中使用一个连接,所以连

接数并不是越多越好,为避免两边的资源消耗,建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,将最小值和最

大值设为一致。

增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮助,WebLogic能够为每一个连接缓存这些对象,此值默认为10

。在保证数据库游标大小足够的前提下,可以根据需要提高Statement Cache Size。比如当你设置连接数为25,Cache Size为10时,数据库可能需

要打开25*10=250个游标。不幸的是,当遇到与PreparedStatement Cache有关的应用程序错误时,你需要将Cache Size设置为0。

尽管JDBC Connection Pool提供了很多高级参数,在开发模式下比较有用,但大部分在生产环境下不需调整。这里建议最好不要设置测试表, 同

时Test Reserved Connections和Test Released Connections也无需勾上。 当然如果你的数据库不稳定,时断时续,你就可能需要上述的参数打

开。

最后提一下驱动程序类型的选择,以Oracle为例,Oracle提供thin驱动和oci驱动,从性能上来讲,oci驱动强于thin驱动,特别是大数据量的操作。

但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改进,这一弱势将得到弥补。而thin驱动的移植性明显强于oci驱动。所以在通常

情况下建议使用thin驱动。而最新驱动器由于WebLogic server/bin目录下的类包可能不是最新的,请以Oracle网站为准:

http://www.oracle.com/technology/software ... jdbc/htdocs/jdbc9201.html。

10) JSP调优
  设置jsp-param pageCheckSeconds=-1;
  设置serlet-reload-check=-1或ServletReloadCheckSecs=-1;
  设置jsp-param precompile=true,关闭JSP预编译选项。

http://wakemorpheus.blog.163.com/blog/static/1262195342009111503816689/


看来对WebLogic的研究可以更深入一些!
分享到:
评论

相关推荐

    一种分布式人脸识别方法及性能优化.pdf

    为了克服这一技术瓶颈,文章提出了一种分布式人脸识别方法,它由多个代理节点和一个中心服务器构成。 【代理和服务器的职责】 代理节点负责对输入的多个视频流进行行人检测、跟踪以及特征提取。通过并发处理,代理...

    一种基于机器学习的数据库性能优化方法及系统实现.pdf

    本文提出了一种基于机器学习的数据库性能优化方法,主要针对数据库的IO性能进行预测和优化。这种方法利用SOFTMAX分类器对数据库参数数据和系统IO性能指标进行模型训练,能够在高维度输入下准确预测数据库IO性能趋势...

    浅谈性能优化方法和技巧.pdf

    性能优化方法和技巧 性能优化是软件开发中非常重要的一部分,它关注系统的控制流程和数据流程、算法的选择和优化、代码的执行顺序和缓存相关的优化等多个方面。性能优化的目的是提高系统的性能,减少系统的负载,...

    一种Linux环境下优化ZFS同步写性能的方法.pdf

    为了提高Linux环境下ZFS文件系统的同步写性能,本文提出了一种优化方法。在深入探讨该方法之前,需要了解ZFS文件系统的背景知识以及同步写性能低下的原因。 ZFS(Zettabyte File System)是由Sun公司研发的一种文件...

    一种基于冗余自由度的机器人姿态优化方法.pdf

    【摘要】中提到的是一种基于冗余自由度的机器人姿态优化方法,主要针对工业机器人的刚度性能进行改进,以提升其运动性能和加工质量。文章指出,由于工业机器人具有高柔性、高自动化和低成本的优点,被广泛应用于制造...

    ORACLE SQL性能优化系列

    ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能,ORACLE 提供了多种优化技术。下面我们将详细介绍 ORACLE SQL 性能优化系列中的一些重要知识点。 一、访问表的方式 ORACLE ...

    Unity性能优化.pptx

    Unity性能优化 Unity性能优化是指在游戏开发中提高游戏性能的过程...Profile Analyzer是Unity提供的一种性能分析工具,能够对比两段性能数据。开发者可以使用Profile Analyzer来分析游戏的性能问题,并找到解决方案。

    CSAPP性能优化实验

    OpenMP是一种常用的并行编程模型,它允许程序员通过添加简单的注释来实现共享内存环境下的并行化。另外,对于GPU加速,CUDA或OpenCL框架可以利用图形处理器的强大计算能力,进一步提升计算密集型任务的执行效率。 ...

    SqlServer性能优化高效索引指南.pdf

    索引是数据库中一种重要的数据结构,它可以提高查询速度、降低查询成本。但是,如果索引设计不当,反而会增加查询成本、降低数据库性能。因此,设计高效的索引是数据库性能优化的关键。 高效索引指南可以分为两大类...

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...

    一种基于事件驱动的阶段服务框架的性能优化方法

    一种基于事件驱动的阶段服务框架的性能优化方法

    C++性能优化技术导论.pdf

    C++是一种强类型的编程语言,它提供了丰富的语言特性,如模板编程、异常处理、智能指针等。正确使用这些语言特性,如避免不必要的对象构造和销毁,可以有效减少程序运行时的开销。 第五章讨论了硬件层面的性能优化...

    常用的后端性能优化六种方式:缓存化+服务化+异步化等

    另一种是通过 NIO 实现异步化,一切网络 IO 皆可异步:RPC 框架、Servlet 3.0 提供的异步技术、Apache HttpAsyncClient、缓存异步接口等等。 六、搜索引擎 搜索引擎复杂查询以及一些聚合计算不适合在数据库中做,...

    10种java性能优化方案.docx

    ### Java性能优化方案详解 #### 一、理解性能优化的重要性 在现代软件开发中,特别是在Java领域,性能优化是一项至关重要的任务。随着系统的复杂性和规模不断增长,优化不仅仅是提高用户体验那么简单,更是确保...

    java性能优化方法

    减少对象的创建是另一种有效的性能优化策略。频繁的对象创建会导致大量的垃圾收集,影响系统性能。可以通过以下方式优化:使用StringBuilder而非String进行字符串拼接,复用对象而非每次创建新的,以及使用池化技术...

    一种AES算法的优化方法研究.doc

    为了应对这一挑战,本文研究了一种AES算法的优化方法,旨在通过减少加密过程的工作量,以及构造更高安全性的S盒,提升AES算法的性能。 首先,传统的AES算法在加密过程中存在着一定的工作量冗余。为了优化这一过程,...

    一个用来做性能优化的工具

    标题中的“一个用来做性能优化的工具”指的是用于提升应用程序执行效率的软件工具,它能够帮助开发者识别并解决性能瓶颈,提高系统响应速度和用户体验。在JavaScript开发中,性能优化是一个至关重要的环节,特别是...

    实验5 数据库性能监视与优化实验.docx

    数据库性能的好坏直接影响到整个应用系统的性能,因此数据库性能优化是数据库管理中非常重要的一部分。 2. 数据库性能监视命令方法 数据库性能监视命令方法是指通过使用SHOW语句来查询数据库性能相关的指标,例如...

    Linux性能优化-内存篇_WEL.pdf

    Linux操作系统使用虚拟内存(Virtual Memory)机制来管理内存,虚拟内存是指计算机系统中的一种内存管理技术,它使得应用程序可以使用超过物理内存大小的内存空间。虚拟内存由两个部分组成:物理内存(Physical ...

Global site tag (gtag.js) - Google Analytics