ITPub博客

首页 > Linux操作系统 > Linux操作系统 > as 10g 之性能优化

as 10g 之性能优化

原创 Linux操作系统 作者:wzy25 时间:2019-02-21 09:33:05 0 删除 编辑

对于一个生产系统来说,如果没有经过
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 bitos上面, -Xmxsizem 该值有限制,在redhat 3.0中, 最大可以开到2668m ,不能再大,再大就会报错。

还有一个选项,就是设置
jvm
的运行方式,一个有两个方式,clientserver方式。
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 主要分为 youngold两部分,
这个参数设置 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博客 ” ,链接:http://blog.itpub.net/3618/viewspace-485517/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2001-12-14

  • 博文量
    1011
  • 访问量
    762609