Is "Out of Memory" a recoverable error?
Walter Bright
newshound1 at digitalmars.com
Fri Dec 5 15:04:36 PST 2008
Leandro Lucarella wrote:
> For example, I'm working on a softswitch (unfortunately no in D). Lets say
> we have a really bad moment and all the subscribers want to talk at the
> same time and we don't support that workload. Lets say our memory is
> exhausted and a new call arrive. A new allocation is done somewhere deep
> inside the call logic, so the PRE COLLECT callback is called. No memory
> can be reclaimed, so the GC runs a collection. Still no memory. POST
> COLLECT and CRISIS are called too without success. My softswitch is down,
> I lost all the current calls. This is not good for business. What I really
> wanted to do is to catch the memory error as shallow in the call logic as
> possible and drop only that current call, leaving all the current
> established calls intact.
>
> So what can I do? Should I manually check each and every allocation in all
> the call logic? I think that's unacceptable.
>
> I think this scenario apply to each client-server application that needs
> to stay alive even with high workloads, as the expense of dropping some
> connection/client (web servers or web applications for example, as someone
> said in stackoverflow.com).
Ok, I thought about this for a while. When a virtual memory system gets
close to running out of memory, it slows to a crawl and starts thrashing
the disk. Other processes on the computer also start to fail by running
out of memory. The program will continue to function, but it will
function so poorly it might as well have aborted.
The solution is to calculate (or measure) the average memory consumption
of each call. Determine the maximum memory the software should
reasonably consume without thrashing, divide by the memory consumption
per call, and that gives a max number of simultaneous calls. Drop calls
that exceed that.
This scheme should work better, and still provides some slack if the
calls dramatically exceed their average memory consumption.
More information about the Digitalmars-d
mailing list