Consultor Eletrônico



Kbase P163813: How to find what is causing an AppServer or Webspeed agent hanging in the same state for too long
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   30/07/2010
Status: Unverified

GOAL:

How to find what is causing an AppServer or WebSpeed Agent hanging in the same state for too long

GOAL:

How to find out why a WebSpeed Agents is hanging in the BUSY state

GOAL:

How to find out why a AppServer Agent stays in Locked or Connected

FACT(s) (Environment):

All Supported Operating Systems
Progress 9.x
OpenEdge 10.x

FIX:

If you have a WebSpeed Agent staying in Busy or a AppServer Agent staying in Connected or Locked too long means that they are either runaway process or the time that takes to execute the request is extremely long.

To troubleshoot if this is a run away process or not find first if the Process ID of the agent is consuming CPU.
If it is consuming CPU and the CPU consumption is constant it means that the process is a runaway process.
A runaway process can be caused by application code issues or Progress Bug.
The best way to identify either is to locate the offending code.
Usually the WebSpeed/AppServer server log file will show that the agent always execute the same procedure prior to end up in the specific state.

For WebSpeed Agents, making the following changes to the web/objects/web-disp.p procedure will allow to find the procedure name being executed.

1) Locate the event:
ON "WEB-NOTIFY":U ANYWHERE DO:and then make the modification:
...

2) Add two messages: one before the "RUN run-web-object" marking the request started and one before the web-stream is closed marking the request end.

MESSAGE "Request started for: " AppProgram . /*added */
RUN run-web-object IN web-utilities-hdl (AppProgram) NO-ERROR.
...
MESSAGE "Request ended for: " AppProgram . /* added */
OUTPUT {&WEBSTREAM} CLOSE.

Make sure that WebSpeed agent executes the modified web-disp.p by putting its location in the beginning of the PROPATH and compiling it as described in P13578.

Alternatively, to get the name of the request can be obtained and written to another file by setting the following environment variables:
LOG_TYPES=Run
LOG_D