PSLwriter is Unable to allocate memory

Document ID : KB000006272
Last Modified Date : 11/09/2018
Show Technical Document Details
Issue:

The PSLwriter is crashing and in the log you see an error that says it's unable to allocate memory.

Cause:

First, determine if this is Oracle which is not able to allocate memory or .NET on the APP server. If the error contains anything that starts with ORA- this means it is probably an error coming from the Oracle database. Anything about allocating tablespace means one of the Oracle tablespaces is out of memory and needs to be expanded. That needs to be addressed on the Oracle side.

A possible exception might be something like:
INTERNAL ERROR (ORA-0) in open...

That out of memory error might be coming from the Oracle client saying it did not have enough RAM to store any query results from the database.
So, if you see this or if the error comes from the PSLwriter and is not an Oracle database error, then .NET or the Oracle client ran out of RAM on the APP server. Read on for how to address that. 

Resolution:

The basic resolution to this problem in the event that the PSLwriter ran out of RAM is to reduce the max event block size in the advanced settings. This determines how many events the PSLwriter will try to save to RAM at one time:

1.jpg

For example, reduce this to 500 or in some rare cases you can make it even lower. Note that lowering this value reduces performance but will cause the engine to use less RAM.

Now, while that will resolve the issue it is also important to discuss other things which affect performance and RAM usage. These include:

1) The number of PSL instances which you have on the system. In general we recommend 1 instance per CPU core and 2GB RAM.

2) The amount of actual RAM on the box. I would never suggest running a production APP server with less than 8GB RAM. Also check which also is installed and using RAM on the system. Ideally an APP server should be a dedicated APP server.

3) The size of your events. Obviously 1000 events which contain a handful of int fields are going to take much less RAM than 1000 events which contain large strings. Your events should contain only the data being used for calculations. You should avoid large descriptions or string fields which are not needed.

4) The actual engine settings such as:

2.jpg

There are several settings here which can also affect RAM. The first is the number of consecutive days setting which you can see is 100 above. Reducing this can reduce the number of events being loaded and so can affect this error. However, if you have a large number of events then lowers this value may still not reduce the blocks of 1000 events you are loading into the system and so this setting by itself may not help solve this problem.

The second settings are the upper and lower memory bounds for the engine. It is important to understand that these are not hard limits. When the engine loads events to calculate, it is going to use as much RAM as it needs. This may be MUCH more than the upper bound. However, when it finishes it's calculation if it finds itself above the upper bound then it will attempt to free memory until it is below the lower bound. So these may not affect an out of memory issue, but if they are not set at all then I would recommend setting them if you get these errors. You may start at 2000 and 1000 and lower them further if needed. But this really depends a lot on available RAM and other factors.

In the event of an ORA-0 out of memory error coming from the Oracle client then the above settings may help but this may also be a more general problem on the machine (since this is coming from the Oracle client and not the PSLwriter). In that case check task manager and make sure there isn't anything left open like sqlDeveloper which is using all the RAM on the box.