User runs a consolidation (e.g. Consolidate with Status) which includes AFC calculations. After this has finished running, user opens the 'batch queue'. Intermittently, inside the 'batch queue' there is an error message (in the job details).
<time> Advanced Formula Calculation is started.
Error in AFC:!java.lang.OutOfMemoryError!
Execution of AFC not OK for: xxxxx
<time + x> Advanced Formula Calculation is finished
NOTE: The error does appear all the time (intermittent issue).
There are several different possible causes for the generic "Error in AFC:!java.lang.OutOfMemoryError!" message.
- For more examples, see separate IBM Technote #1636718.
This IBM Technote shall specifically *only* relate to the scenario where the JAVA JRE environment (which hosts the AFC calculation engine) has run out of memory.
By default, the version of JRE that comes with Controller 10.1.1308 (and earlier) has the following memory limitations:
- Initial RAM = 256 Mb
- Maximum RAM = 512 Mb
By default, the 32-bit version of JRE that comes with Controller versions between 10.1.1691 and 10.1.2681 (inclusive) has its RAM settings 'dynamically' configured.
- In other words, the JRE will attempt to allocate as much RAM as it needs (using its own algorithm) up to the 32-bit maximum limit (2Gb).
By default, the 64-bit version of JRE (that comes by default with Controller 10.2 onwards, and is optional from versions between 10.1.1691 and 10.1.2681 inclusive) does have a memory limit.
- This memory limit can be manually increased to match the needs of the customer.
Problem could potentially affect any environment, but it is much more likely for customers who are:
(1) Using versions of Controller *before* 10.1.1 FP1 (10.1.1671)
(2) Running multiple batch process servers.
- For example, in the following real-life example the customer is running 3:
- The intermittent nature of the problem is explained by the fact that (randomly) there may have multiple concurrent AFC jobs running that swamp the available memory for the JAVA JRE environment.
Diagnosing the problem
To check what the current default JAVA memory configuration is (on the Controller application server), perform the following:
1. Launch a Command Prompt
2. Change directory to the folder where the Controller JAVA is located, for example:
cd C:\Program Files\IBM\cognos\c10\bin\jre\6.0\bin
3. Run the following command:
java -verbose:sizes -version
Resolving the problem
1. Upgrade to the latest version of Controller (ideally 10.2 or later).
- TIP: Controller 10.2 automatically comes with a 64-bit JAVA proxy
2. If upgrading to a version between 10.1.1691 and 10.1.2681 (inclusive) then modify the JAVA proxy from 32-bit to 64-bit
- For instructions, see separate IBM Technote #1618609.
3. If the errors persist, increase the JAVA maximum memory limit (by creating/modifying the file 'CCRProxy.options').
Steps to increase the JAVA maximum memory limit:
1. Logon to the Controller application server as a Windows administrator
2. Browse to the folder ...\server
- TIP: By default, this will be in a location similar to: C:\Program Files (x86)\IBM\cognos\c10\server
3. Check to see if the file CCRProxy.options exists.
- By default this file will not exist. If it does exist then (as a precaution) create a backup of the file (for example, copy it to CCRProxy.options.backup)
4. Save the relevant file CCRProxy.options (attached to this Technote) inside that folder
TIP: Several example files are attached to this Technote. Download the appropriate ZIP file (for your needs) and extract the file:
- 1Gb_maximum.zip = suitable for basic 32-bit JAVA needs only
- 2Gb_maximum.zip = suitable for standard 32-bit JAVA needs
- 4Gb_maximum.zip = suitable for standard 64-bit JAVA needs
- 6Gb_maximum.zip = suitable for advanced 64-bit JAVA needs
NOTE: Please ensure that your Controller application server has enough free RAM (physically installed in the server) to cope with reserving this amount for your JAVA service.
5. Right-click on "My Computer" and choose "Manage"
6. Open the section "Services"
7. Restart the Windows service " IBM Cognos Controller Java Proxy"
(1) Reduce the number of batch services running to 1
or (2) Increase the available memory available to the existing 32-bit JRE (Java environment).
- This can give more stability (fewer errors), but it *may* not solve the problem 100% entirely.
The file ' CCRProxy.options' should contain two parameters, which contains the memory sizes for initial and maximum heap size, for example: