Oracle10gas之perfermencetunning初步

发表于:2007-05-25来源:作者:点击数: 标签:Oracle10gas
对于一个生产系统来说,如果没有经过 perfermence tunning,缺省得安装是没法满足需要的。 由于10gas 涉及的有ohs,oc4j,以及 数据库 等各个部分,数据库的 性能 调试大家请参考 Oracle数据库管理 板块。 ohs由于已经经过 oracle 的优化, 需要调试的部分比较

  对于一个生产系统来说,如果没有经过
  perfermence tunning,缺省得安装是没法满足需要的。
  
  由于10gas 涉及的有ohs,oc4j,以及数据库等各个部分,数据库性能调试大家请参考
  Oracle数据库管理 板块。
  ohs由于已经经过oracle的优化,
  需要调试的部分比较少。
  主要的调试部分集中在oc4j上,
  
  所以本文主要讨论oc4j得性能调试。
  
  对于一个中间件来讲,主要的部分就是内存和线程。内存由来保存各种数据,线程用来执行代码,实现各种功能。所以对10gas得调试,也主要针对这两个方面。
  
  对于内存,由于10gas的运行基础是java vm,所以就是针对jvm的调试。关于jvm的各种调试方法,大家可以到java.sun.com上面去找。
  
  jvm的内存详细分配以及垃圾回收方法,大家可以看看java.sun.com这里就针对一般的10gas运行的pc server平台做一些性能调整方面的参数设置。
  
  最重要得就是下面这两个参数
  
  -Xmssizem -Xmxsizem 其中 -Xmssizem 设置jvm使用的最小 heap size(内存),以m为单位,该值得设置通常需要〉128M。
  -Xmxsizem 设置jvm使用的最大 heap size(内存),以m为单位,该值通常《=系统物理内存的60%,比如一个3G得服务器,设置到1.6G就可以了。在32 bit的os上面, -Xmxsizem 该值有限制,在redhat 3.0中, 最大可以开到2668m ,不能再大,再大就会报错。
  
  还有一个选项,就是设置jvm的运行方式,一个有两个方式,client和server方式。 client方式启动比较快,适合做客户端的运行。而server启动虽然比较慢,但是经过优化,特别适合需要长期大负载得服务器运行。由于10gas缺省安装已经是server方式,就不用修改了。
  
  接下来是stack size的设置,这个是用来设置线程最大可用的stack size,通常建议该值设置为128k-Xss128k
  
  接下来是设置
  -XX:MaxPermSize 这个设置permanent generation of jvm heap 。 缺省值为64m,可以满足大部分应用。如果你的系统需要经常动态load ,unload大量的class,需要把该值设置的大一点我得生产系统设置的是128M 。避免出现即使还有空闲内存,系统却报outOfMemory 的错误(通常出现在编译jsp的时候)。
  
  由于jvm里面最重要得一个部分就是垃圾回收处理。在1.3之前,只有比较简单的单线程回收处理功能,这个就成了整个系统的运行瓶颈。如果回收的时间过长,会导致系统无响应。在1.3以后陆续增加了一些并行回收机制,可以多线程同时进行垃圾回收,在大型的系统里面,这个就显得比较重要了。
  
  如果10gas的运行平台是单cpu的话,就不需要作修改了,缺省的就行了。
  
  如果是多cpu情况下,可以采用 并行回收算法。我得生产系统是4 cpu的系统,所以采用如下算法-XX:+UseConcMarkSweepGC old部分采用 ConcMarkSweepGC 算法-XX:+UseParNewGC young部分采用并行算法
  
  上面各个参数的设置方法有两种
  1.通过em设置
  2.手工修改opmn/conf/opmn.xml 文件
  
  通过em设置方式是 进入em页面,到 oc4j得页面,然后点击 Administration ,
  选择
  Server Properties 在
  Command Line Options
  中设置 Java Options 即可。
  设置方式如下
  -server -Xms1408m -Xmx1408m -XX:MaxPermSize=128m -XX:NewSize=500m -XX:MaxNewSize=500m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xss128k
  
  如果通过手工设置,则修改opmn/conf/opmn.xml 文件修改对应的oc4j instance得  。
  
  由于是手工修改配置文件,需要执行
  dcmctl updateconfig 命令
  然后重起 oc4j即可。
  
  10gas的线程通过设置线程池来设置,线程池主要分为两大类
  1.普通的线程池,这个主要是用来服务用的。比如你的http的请求就是通过它里面的线程完成的
  2.专用的ORMI connections 或者internal connection processing. 该线程池主要用来连接用的,在有大量的远程客户端调用ejb的情况下,需要配置该 线程池。
  
  
  对于我们通常的应用来说,主要是本地的servlet调用ejb,不会存在大量的ejb client远程调用ejb的情况,在2cpu的服务器的情况下,通常普通的线程池设置为30个线程已经能够完全利用所有cpu,而ORMI connections 通常设置为10即可。
  
  该设置的方法为手工修改 j2ee/home/config/server.xml 文件,加上如下内容
  
  
  其中min 设置普通连接池的最小线程数 max 设置普通连接池最大线程数 ,queue 设置可以保存再等待队列中得请求数, keepAlive 设置 线程如果没有工作,多长时间后该线程被摧毁,设置为-1就意味着该线程不会被摧毁。
  
  其中cx-min,cx-max,cx-queue,cx-keepAlive 都是设置connection 线程池的相关数目。各项得解释同普通线程池。
  
  修改完后,执行一下
  dcmctl updateconfig 命令
  然后重起 oc4j即可。
  
  通过上面的性能调试,基本上可以满足小型的企业应用,如果需要满足大规模的应用,就需要通过多台服务器做cluster了。我会在后面的文章里面接着讲 如何作cluster 。
  
  
  
  
  
  
  
  
  
  
  
  
  

原文转自:http://www.ltesting.net