The Output Post Processor (OPP) is an enhancement to Concurrent Processing and is designed to support XML Publisher as a post-processing action for concurrent requests. If a request is submitted with an XML Publisher template specified as a layout for the concurrent request output, then after the concurrent manager finishes running the concurrent program, it will contact the OPP to apply the XML Publisher template and create the final output.
How Output Post Processor(OPP) works
- An application user submits an XML Publisher-based report.
- The standard concurrent manager processes the request.
- The XML data file is generated by the standard concurrent manager.
- A post-processing action defines that the output needs to be generated by the Output Post Processor, So the standard manager sends the request in the queue of OPP
- The Output Post Processor generates the final report and informs the standard concurrent manager whether that was successful.
- The standard concurrent manager finalizes the concurrent request
The Output Post Processor makes use of the Oracle Streams Advanced Queuing (AQ) database feature. Every OPP service instance monitors the FND_CP_GSM_OPP_AQ queue for new messages and this queue has been created with no value specified for primary_instance (link). This implies that the queue monitor scheduling and propagation are done in any available instance. In other words, ANY OPP service instance may pick up an incoming message independent of the node on which the concurrent request ran.
Maximum Memory Usage Per Process:
The maximum amount of memory or maximum Java heap size a single OPP process can use is by default set to 512MB. This value is needed by the Loader Data File: $FND_TOP/patch/115/import/US/afoppsrv.ldt which specifies that the DEVELOPER_PARAMETERS is “J:oracle.apps.fnd.cp.gsf.GSMServiceController:-mx512m”.
How to determine the current maximum Java heap size:
SELECT 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 ———- ————– ——————————————————– 1091 FNDOPP J:oracle.apps.fnd.cp.gsf.GSMServiceController:-mx512m |
How to Increase the maximum Java heap size for the OPP
To 1024MB (1GB):
UPDATE 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');
To 2048MB (2GB):
UPDATE fnd_cp_services SET developer_parameters = 'J:oracle.apps.fnd.cp.gsf.GSMServiceController:-mx2048m' WHERE service_id = (SELECT manager_type FROM fnd_concurrent_queues WHERE concurrent_queue_name = 'FNDCPOPP');
Then we need to bounce the OPP to get it into effect
How to recreate the OPP queue
The OPP queue can be Recreated using the $FND_TOP/patch/115/sql/afopp002.sql file as an ‘APPLSYS’ user. On running the script you will be prompted for a username and password.
Profile options related to OPP
2 new profile options can be used to control the timeouts
Profile Option : Concurrent: OPP Response Timeout
Internal Name: CONC_PP_RESPONSE_TIMEOUT
Description: Specifies the amount of time a manager waits for OPP to respond to its request for post-processing.
Profile Option : Concurrent: OPP Process Timeout
Internal Name: CONC_PP_PROCESS_TIMEOUT
Description: Specifies the amount of time the manager waits for the OPP to process the request.
Related: Oracle concurrent Manager
How to check OPP logfiles
To investigate XML issues or other publishing problems, often the OPP log file is needed.
Below are the steps to find the logfile from the Front end
- Log in to the application as SYSADMIN
- Responsibility: System Administrator
- Function: Concurrent –> Manager –> Administration
- Select the Output Post Processor
- Click on the Processes button
- Select the Concurrent Process that was active during the time that the request ran
- Click on the Manager Log button to open the Output Post Processor log file
Directly from the file system after identifying the corresponding OPP log file name using the following SQL statement:
SELECT fcpp.concurrent_request_id req_id, fcp.node_name, fcp.logfile_name
FROM fnd_conc_pp_actions fcpp, fnd_concurrent_processes fcp
WHERE fcpp.processor_id = fcp.concurrent_process_id
AND fcpp.action_type = 6
AND fcpp.concurrent_request_id = &&request_id
Threads and Processes for Output post-processor
OPP Service is a multi-threaded process.
OPP processes and threads can be seen from the Concurrent Manager define form
1) Logon to Applications with “System Administrator” responsibility
2) Navigate to Concurrent -> Manager -> Define
3) Query for “Output Post Processor”
4) Click on “Work Shifts” and This will show the number of processes
One service instance of the OPP service is seeded by default. This seeded OPP service instance has one work shift with one process
if you are on parameters, you will see the threads
oracle.apps.fnd.cp.opp.OPPServiceThread:2:0:max_threads=5
The max_threads parameter controls the maximum number of request threads. This number may be increased depending on the workload. If all the OPP process has reached their respective maximum number of threads, the requests waiting to be processed remain in a queue to be processed as soon as threads become available
It is suggested to increase the number of “threads” as much as possible, then start adding “Processes”, if needed. The limiting factor with increasing “threads” is memory, if one sets the max heap size of a JVM to 2GB, then all “threads” will share this memory.
To get optimum performance, it is suggested to keep “Processes” to a minimum. It is recommended to have 2 OPP “Processes” with more “threads”.
General errors with OPP
- (CONC-PP NO RESPONSE):
Error meaning: The Output Post-processor is running but has not picked up this request. No further attempts will be made to post-process this request, and the request will be marked with Warning status. Setting the profile option Concurrent: OPP Response Timeout to a higher value may be necessary.
Solution:
The Concurrent Manager process generates the XML data file. Upon completion, it will trigger the Output Post Processor to merge the XML data file and the template that was selected on the Submit Request form. The number of Concurrent Requests that the Output Post Processor can handle in parallel depends upon:
the number of Processes
the number of Threads Per Process
The values are 4 Processes and 5 Threads Per Process so a total of 20 reports can be processed in parallel.
In case there are other Concurrent Requests running that have already invoked the OPP then it might happen that no additional requests can be picked up for a period of time. The pending request will be picked up as soon as one of the running jobs completes. By default, a timeout will occur if it takes longer than 120 seconds (2 min.) for the Output Post Processor to pick up the request from the Concurrent Manager process. In that case, the Concurrent Request will complete with a status Warning and the Request log file will contain Error Message A (see above)
2) CONC-PP TIMEOUT
Solution: Once the Output Post Processor picks up the request, the XML Publisher engine is invoked to generate the final output file. The time that this takes will depend on various elements such as:
size of the XML Data File
the complexity of the template
performance of the server
….
By default, a timeout will occur if it takes longer than 300 seconds (5 min.) for the XML Publisher engine to generate the output file. The Concurrent Request will be complete with a status Warning and the Request log file will contain an Error Message. We will need to increase the timeout if necessary in our env to avoid this error
3) java.lang.OutOfMemoryError error
A high number of threads increases the risk of running into java.lang.OutOfMemoryError errors during peak loads. So Limit the number of threads per OPP process: each thread will process a single report thus more threads means that more reports can run in parallel however they share the maximum Java heap size per process
Enable the scalable feature of the XSLT processor on the Template level and only for those reports that are known to process large amounts of data. It is not recommended to enable the scalable feature of the XSLT processor at the global level.
4) Out of memory in concurrent Program
For the specific concurrent program that is showing OPP related outofmemory issues, you can think of increasing run time memory
Go to “System Administrator” responsibility.
Navigate to Concurrent – > Program – > Define.
Search for the concurrent program
Set the Options field to -Xmx1024M (can be set to 2048M if the program still fails)
Save.
Bounce the Concurrent Manager for the effects to take place.
How to restart OOP
Using System Administrator responsibility navigate to
Concurrent–>Manager–>Administer ->query for the Output Post Processor
The Actual should be equal to the Target processes (eg: Actual=2 Target =2)
Deactivate and Activate
Alternatively, you can click on Restart.
If not stopped/deactivated please check the processes and kill and try to start
ps -ef |grep java | grep -v grep | grep FNDOPP
Related Articles
Concurrent Manager Queries
Parallel Concurrent Processing
oracle apps queries for DBA
FNDLOAD command
40 question you must know about R12.2
Unable to Start Output Post Processor
I try to restart the OPP after increasing the threads but it did not get restart.I tried to terminate it and it is still showing the terminating Status.Please let me know what can we do here . Please note that i dont have the unix box to kill the process.
Is there any other way to kill the OPP Process by Toad.
Thanks
Rohit Bhagat
You may try finding the sid from the below query and killing the session
SELECT module,
username,
status,
action,
schemaname,
osuser,
process,
machine,
program
FROM gv$session
WHERE module like ‘%OPP%’ ;
Also was the OPP running good before increasing the thread.