Kbase P142345: CPU utilization increases after improperly terminating client sessions.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  8/4/2009 |
|
Status: Verified
SYMPTOM(s):
CPU utilization (as viewed using the AIX nmon utility) shows that all CPU's are utilized at near 100%. User utilization is between 10% and 30%, system utilization takes up the remainder (70% to 90%).
Individual process CPU utilization (as viewed using the AIX topas utility) does not show any particular process consuming a lot of CPU. The _progres processes were consuming at most 2% of the available CPU.
Running the AIX procstack utility on some of the _progres processes with the highest CPU utilization percentages show that the processes are in select() calls waiting for screen input.
Running the AIX procstack utility in house on a _progres process that was waiting to update a customer record shows a similar stack trace.
Running the AIX truss utility on one of the _progres processes with the highest CPU utilization shows that the process is spinning in a loop making select(), read() and poll() calls.
Running the AIX truss utility on the in house _progres process shows that the process is also in a select call but sleeping.
Running the AIX procfiles utility on the _progres process with the highest CPU utilization shows that the process is trying to read from the terminal.
The user's shell profiles on the AIX system are trapping for certain (unknown at this time) signals.
There is a script running that will terminate idle (as measured by user activity, keystrokes, etc) processes. How this is being implemented is unknown at this time.
The increase in CPU utilization was not noticed until after migrating from 9.1D on HP-UX to 9.1E on AIX.
FACT(s) (Environment):
HP-UX
IBM AIX 5.3
Progress 9.1D
Progress 9.1E04 Service Pack
Database was copied from the HP-UX machine to the AIX machine using probkup and prorest utilities.
CAUSE:
Terminating the idle processes is causing them to become either a zombie (defunct) or orphan processes, and sending them into a loop that is consuming CPU.
FIX:
Do not arbitrarily kill client processes connected to a database. Use the Progress promon utility or the Progress proshut command to disconnect clients. Also, do not set the client's UNIX shell to trap for signals. Progress has it's own signal handler and depends on certain signals to properly disconnect clients and free their resources.