首页 > Linux操作系统 > Linux操作系统 > as 10g 之性能优化
对于一个生产系统来说,如果没有经过
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的时候)。
接下来设置 -XX:NewSize -XX:MaxNewSize参数,
由于jvm
heap 主要分为 young和old两部分,
这个参数设置 young部分得大小,通常不要超过 -Xmx的一半,否则也会出现jvm还有空余内存,但是old部分已经满了,出现outofmemory的错误。
这两个值通常设置为一样即可。
由于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得
,修改value 为
-server -Xms1408m -Xmx1408m -XX:MaxPermSize=128m -XX:NewSize=500m -XX:MaxNewSize=500m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xss128k
。
由于是手工修改配置文件,需要执行
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 。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3618/viewspace-485517/ ,如需转载,请注明出处,否则将追究法律责任。