Postby ConvertFromOldNGs » Fri Aug 07, 2009 2:58 pm
by Dean Cooper >> Wed, 2 Jan 2008 10:29:07 GMT
If you go ahead with Node Sampling, suggest you email JADE Support and ask for the notes and app we have that may make it easier for you to use.
Alternatively, if you are investigating the locks/deadlocks in a test environment (and your production environment isn't on JADE 6.2), you could download JADE 6.2 and upgrade your test environment, and then use the new JADE 6.2 Monitor to investigate things. The JADE 6.2 Monitor provides significantly more information and you can target individual nodes and processes if required.
It isn't possible (even with sampling) to see the method from which a lock was requested.
However, if you're specifically chasing deadlocks (as opposed to general lock contention/queuing performance), then it's often easiest to start with the DoubleDeadlockException ini file setting. By default this is disabled. You can enable it in the JadeServer ini file section as follows:
[JadeServer]
DoubleDeadlockException=true
By default, when a deadlock occurs, the process requesting the lock that caused the deadlock receives the exception. This gives you one side of the picture. What you also want to see is the other process that's holding the conflicting lock(s). That's what the DoubleDeadlockException setting does. When it's set to true, both processes receive a deadlock exception. So you can then see a stack dump for each process, and you can use a global deadlock exception handler to write out all locks for each process (using System::getLocks) at the point of the deadlock, if required. Unless your application is using session locks and/or is holding transaction duration locks across idle state (eg: app.doWindowEvents - not recommended), then the conflicting locks will most likely have been requested by methods in one or both of the call stacks. That's generally sufficient to start chasing them down.
Dean.