EBS中OPP(Output Post Processor)的优化,主要能够由下面3个方面来入手:java
Threads和Processes的设置能够在并发管理器定义的页面中看到,以下:
其中,2表明service threads的数量,max_threads参数控制request threads的数量。能够根据须要增长max_threads的值(max_threads能够说是定义OPP吞吐量的一个重要参数)。sql
Jvm memory argument能够使用apps用户登陆数据库,运行下面sql获得:数据库
sqlSELECT service_id, service_handle, developer_parameters FROM fnd_cp_services WHERE service_id = (SELECT manager_type FROM fnd_concurrent_queues WHERE concurrent_queue_name = 'FNDCPOPP'); SERVICE_ID SERVICE_HANDLE DEVELOPER_PARAMETERS ---------------- -------------- -------------------------------------------------------------------------------- 1080 FNDOPP J:oracle.apps.fnd.cp.gsf.GSMServiceController:-mx512m
每一个OPP process都须要在OS中启动单独的java进程。因此在调优过程当中,建议先增长Threads的数量,Threads的数量受每一个process能够使用的内存限制,在已有的threads还不够用时,就须要增长process的数量了。并发
每一个OPP的process都会占用单独的内存,因此在增长process个数的时候,OS空闲内存就是要考虑的一个因素。oracle
在OPP服务进程中出现outofmemory错误时,就须要增长jvm内存参数了,可以使用下面sql来调整OPP的jvm memory参数。调整以后须要重启OPP生效。app
sqlUPDATE fnd_cp_services SET developer_parameters = 'J:oracle.apps.fnd.cp.gsf.GSMServiceController:-mx1024m' WHERE service_id = (SELECT manager_type FROM fnd_concurrent_queues WHERE concurrent_queue_name = 'FNDCPOPP');
EBS中,OPP主要用来处理XML Publisher生成报表的请求,在11i和R12版本中,OPP使用32位java,因此单个OPP process最多只能使用4G内存(而Oracle建议的值为2G),因此从处理能力方面来看,单个OPP进程是受到很大限制的。在运行比较大的报表,出现outofmemory错误时,单纯增长process和threads已经不能很好解决问题,须要从报表的性能上去考虑。在处理比较小的报表请求时,较大的process和threads参数能够增长系统的吞吐量。jvm