Oracle10gas之perfermencetunning初步
对于一个生产系统来说,如果没有经过 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
|