EBS: R12 Default OACORE Memory Settings Are Not Enough

Posted in: Technical Track

Not many of you know that my day-to-day work focus is Oracle E-Business Suite :). Here goes for an EBS-related blog post…

Recently, several of my team’s clients upgraded to version R12.1.3 and faced the same problem related to OACORE memory settings.

Default configuration

OACORE OC4J containers’s default memory parameters are “-Xmx512M -Xms128M”. This is way too small for most EBS systems (unless you are running a sand box environment). You can use the following command to find the setup in your system:

[[email protected] scripts]$ cd $ADMIN_SCRIPTS_HOME
[[email protected] scripts]$ ./adoacorectl.sh status | grep "OC4J:oacore" | awk -F"|" '{print $3}' | while read L ; do ps -fp $L | grep -v PID ; done | awk -F"-X" '{print $2 $3}'
mx512M ms128M
mx512M ms128M
[[email protected] scripts]$

My suggestion

As always, it’s kind of difficult to suggest anything specific. (It depends on the situation.) However, instead of using “-Xmx512M -Xms128M”, I would start with  “-Xmx2048M -Xms1024M” set up. To change the memory parameters, edit $CONTEXT_FILE and change the following line:

[[email protected] scripts]$ grep s_oacore_jvm_start_options $CONTEXT_FILE
         ... -server -verbose:gc -Xmx2048M -Xms1024M ...
[[email protected] scripts]$

To finalize the setup run:


And restart OACORE component:

./adopmnctl.sh stopall
./adopmnctl.sh startall

Side notes

  • I do believe that if Java and applications’ code would be bug-free, “s_oacore_nprocs” parameter should be set to 1 for most of the systems.
  • However, Oracle instructs us to set an additional OARCORE process for all 200 users.
  • In most systems I have worked with, the parameter was set to 2.
  • Having multiple OACORE OC4J processes per environment makes it difficult to monitor the health of each container.
  • If you know how to make sure that each of the OACORE containers generates a correct response (we typically check login screen using the text browser from our monitoring system), then please help me out and share your solution in the comments section of this blog post.

Emergency fix

Just in case you need to fix an issue quickly, you may want to edit $INST_TOP/ora/10.1.3/opmn/conf/opmn.xml file directly and restart OPMN processes to enable new parameters.
P.S. Don’t forget to edit $CONTEXT_FILE to keep it in sync.

As always, any comments are welcome!


View Yury Velikanov's profile on LinkedIn

Want to talk with an expert? Schedule a call with our team to get the conversation started.

About the Author

Yury is a nice person who enjoys meeting and working with people on challenging projects in the Oracle space. He started to work as an Oracle DBA 14 years ago (1997). For the past 10 years (since 2001) his main area of expertise is Oracle e-Business Suite. Yury is an OCP 7,8,9,10g and OCM 9i,10g. He is a frequent presenter at Oracle related conferences such as Hotsos, UKOUG and AUOUG. Yury is a socially active person. Apart from Social Media (Twitter, Bloging, Facebook) he is the primary organizer of Sydney Oracle Meetup group (250 people). So if you happen to be in Sydney (Australia) drop Yury a message and stop by at one of his Meetups.

6 Comments. Leave new

Use reload to enable new parameters instead of adopmnctl.sh stopall/startall
adopmnctl.sh reload
You are running adopmnctl.sh version 120.4.12000000.3

opmnctl: reconfiguring opmn…
opmnctl: opmn reloaded successfully…


Good. This option is less destructive for a running production system.

Yury Velikanov
March 28, 2013 8:15 am

Hey Jan,

Thanks for sharing. I didn’t know about reload option. #everydaylearning




I want to know how many oacore process are running on machine,

OC4JGroup:default_group | OC4J:forms | 14508 | Alive
OC4JGroup:default_group | OC4J:oacore | 9180 | Alive
HTTP_Server | HTTP_Server | 9020 | Alive

prompt JDBC Connection Usage Per JVM Process
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

select machine, process, count(*) from gv$session
where program like ‘%JDBC%’
group by machine,process
order by count(*) desc

I will find the howmany process are connect to JDBC ,I want to know what are they,all are oacore or different.


reload do not change value given by
$ADMIN_SCRIPTS_HOME/adoacorectl.sh status | grep “OC4J:oacore” | awk -F”|” ‘{print $3}’ | while read L ; do ps -fp $L | grep -v PID ; done | awk -F”-X” ‘{print $2 $3}’

Yury Velikanov
July 23, 2013 7:32 pm

Did you try to reload OPMN?


Leave a Reply

Your email address will not be published. Required fields are marked *