Not enough storage is available to complete this operation
Delphi 2006, RBServer 10.? Form based reports.
Our report server has failed 3 times, each time about 14 days apart. The
error in the RBServer log is: "System Error. Code: 14.Not enough storage is
available to complete this operation." From comparisons of the RBServer
and W3CSVC logs we think the problem might be with the desktop heap.
Today we were able to duplicate the error with our load testing software.
We kicked off 25 reports every 10 seconds and after about 250 reports the
server failed. At the same time we monitored the desktop heap, when the
heap reached 100% the server failed. We then reduced the load to about 75%
of the heap usage to keep the service from failing. We thought if this was
the problem (a lot of reports kicked off in a short period of time) we could
just increase the heap. However a bigger problem is that we never saw the
heap usage reduce, even after the sessions had expired and Cache clean up
has taken place and no further reports requested. A small number of report
requests at this point would be probably be enough for the application to
fail. Which is what we think is happening on our production machine. All
three time has been on days when we were training users in the classroom and
they run several reports as well as our normal user load. We tested using
several different reports, but the results were always the same. It appears
that the load placed on the heap when reports are run is never actually
released. Of course when we restart the RBServer service the heap usage is
reduced.
What are we missing on releasing the memory after the report is generated?
Our report server has failed 3 times, each time about 14 days apart. The
error in the RBServer log is: "System Error. Code: 14.Not enough storage is
available to complete this operation." From comparisons of the RBServer
and W3CSVC logs we think the problem might be with the desktop heap.
Today we were able to duplicate the error with our load testing software.
We kicked off 25 reports every 10 seconds and after about 250 reports the
server failed. At the same time we monitored the desktop heap, when the
heap reached 100% the server failed. We then reduced the load to about 75%
of the heap usage to keep the service from failing. We thought if this was
the problem (a lot of reports kicked off in a short period of time) we could
just increase the heap. However a bigger problem is that we never saw the
heap usage reduce, even after the sessions had expired and Cache clean up
has taken place and no further reports requested. A small number of report
requests at this point would be probably be enough for the application to
fail. Which is what we think is happening on our production machine. All
three time has been on days when we were training users in the classroom and
they run several reports as well as our normal user load. We tested using
several different reports, but the results were always the same. It appears
that the load placed on the heap when reports are run is never actually
released. Of course when we restart the RBServer service the heap usage is
reduced.
What are we missing on releasing the memory after the report is generated?
This discussion has been closed.
Comments
Have not heard of this before
- I would try adding some custom logging - perhaps some messages when each
form gets created/destroyed.This example shows how to add custom logging
messages to the server.
www.digital-metaphors.com/tips/CustomSeverLogging.zip
- form based report use more windows resources (handles, etc). I would make
sure that the report forms you use do not contain any other visual controls
(buttons, edit boxes, etc). Just a blank form and the report components. You
could also try moving them to a TDataModule.
- In Delphi, the forms and visual controls, forms are not usually allowed to
exist in a thread, but we were able to make it work. However, there are
restrictions on when a form can be destroyed. When a session times out they
may not be free'd right then, but instead marked as inactive and then
destroyed later.
- It is possible to setup a server farm - that might be another option
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
My mistake..try the link again - the file is there now...
www.digital-metaphors.com/tips/CustomSeverLogging.zip
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
The link for the customlogging example does not seem to be valid. Can
you recheck the url for this?
each
logging
make
controls
components. You
allowed to
they
--- posted by geoForum on http://delphi.newswhat.com