Consultor Eletrônico



Kbase P104206: Fathom AppServer Profile Report gives negative numbers
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   03/11/2006
Status: Verified

FACT(s) (Environment):

Fathom Management 2.X
Fathom Management 3.X

SYMPTOM(s):

Fathom AppServer Profile Report gives negative numbers

Run Count field in Fathom AppServer report shows negative numbers

Average Request Duration value in Fathom AppServer report shows negative numbers

Return Code Success shows negative numbers in Fathom AppServer Report

negative numbers are no-where near the 32-bit integer value

negative values occur when the monitored procedure is being run under load

latest service packs applied

CAUSE:

The AppServer Broker pushes entries for running procedures into an intermediate store. When the Fathom poll takes place, these entries are asynchronously collected from the store. The negative numbers was related to the calculation of differences between the current poll and the previous poll.
If the broker is up and running the procedures when Fathom starts, or if the procedures start in an order where they maintained the sequence in the interim store there is no problem and the calculations are correct.
If the set of running procedures were not the same from one poll to the next, Fathom calculated the difference by subtracting the previous value of one procedure (procA) from the new value of another procedure (procZ) resulting in incorrect metrics and specifically, a negative number when the new value is less than the previous value.

CAUSE:

BUG# 20050513-004

FIX:

This issue has been addressed in 3.1A02 and 3.1B, where an attribute to check the procedure name matches when doing the calculation and not to rely on the sequence being maintained from one poll to the next.

There are no more service packs planned after the 3.0A04 release, so far the workaround, is to periodically re-set these counters with the code provided below against the Fathom database. It does not fix the problem - it only resets the negative numbers to 0 so the profile/report won't be reporting them as negative.

/* code start */
DEF BUFFER my_buf FOR OE_ActASProc.
FOR EACH OE_ActASProc
WHERE ActASProc_Calls < 0
OR ActASProc_TotTime < 0
OR ActASProc_MaxTime < 0

NO-LOCK:
FIND my_buf WHERE ROWID(my_buf) = ROWID(OE_ActASProc).
IF my_buf.ActASProc_Calls < 0 THEN my_buf.ActASProc_Calls = 0.
IF my_buf.ActAsProc_TotTime < 0 THEN my_buf.ActAsProc_TotTime = 0.
IF my_buf.ActASProc_MaxTime < 0 THEN my_buf.ActASProc_MaxTime = 0.
END.
MESSAGE "done" VIEW-AS ALERT-BOX.
/* code end */