Kbase P9147: Remote server crashes with error 9874 or 893 - Client error 2659
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  26/08/2009 |
|
Status: Verified
SYMPTOM(s):
Remote server crashes with error 9874 or 893
SYSTEM ERROR: strent request for more than 64K. (9874)
SYSTEM ERROR: strent request for more than 32K. (893)
Stack trace from _mprosrv reads:
strentd
strent
qrGetQuery
qrOpen
Error 9874 only appears in the database log file.
All client sessions connected to a particular remote client server die
Error message in log file of a connected Database or in a client log file or a WebSpeed server log.
May see vv_flush messages associated with clients from the same server.
Error 2659 on the client application
Disconnect from server; database is being shutdown. (2659)
** Save file named core for analysis by Progress Software Corporation. (439)
FACT(s) (Environment):
All Supported Operating Systems
Progress/OpenEdge Versions
OpenEdge Category: Database
CAUSE:
When there is too many queries are left open on the remote server, the remote server crashes because there are no more memory available to handle additional requests and hit the strent limit. This happens becuase queries on the client application are not closed properly on the client side
Each query a client opens to a remote client server creates a structure in the memory of the remote client server. The structure takes up a bit of memory for each query.
Any queries left behind by clients or not released by clients tie up the memory will limit the number of future queries handle by the Server.
Data structures are larger on 64-bit versions, so it may not take as many open queries for this problem to occur in the newer versions of OpenEdge.
Code has been added to try to clean up after abnormally terminated client sessions but there may not be immediate identification of when a remote client has terminated.
Application code can open a query without closing the query and therefore tie up the server memory as well and since this isn't an abnormal termination, the code introduced to release memory of terminated clients will do nothing to release these resources.
FIX:
Each remote server keeps track of all its clients' queries (be it static or dynamic) in an area which cannot exceed 64Kb in 64 bits products and 32kb for 32 bits products.
A very common cause for this is that dynamic queries or buffers referring to database tables are not cleaned up properly.
Analyze the application source code ensuring that all unused opened cursors are closed for each query opened by closing it as soon as the queries are no longer needed.