Architecture - Deadlock Detection

FriendlySNMP agent has a built-in deadlock detection mechanism. All scalars, tables and notifications related to it are declared in FRIENDLY-SNMP-MIB. The agent has a dedicated thread which periodically check JVM for deadlocks. The default check interval is 1 second. This value could be modified using MIB browser SET request for a scalar deadlockCheckInterval. Setting this value to 0 disables deadlock detection. The modified value is preserved in the persistency storage and is used in subsequent agent runs.

See demo application for a deadlock detection example.

Each detected deadlock triggers a notification appDeadlock. Deadlock details could be viewed in a MIB browser in table views.

The table deadlocksListTable contains a full list of deadlocked threads. Example of this table for two deadlocks of 2 and 3 threads was generated in a demo application:

The column BlockedTime is not visible in this image at the right.

The table deadlockThreadViewTable contains details for each deadlocked thread. Example of this table for one of deadlocked thread from the deadlocks above:

The table contains essential for deadlocks debugging information including trace stack of the deadlock.

There are two methods next and fixed to navigate through deadlocked threads. The choice of the navigation method is defined in the read-write scalar deadlockThreadViewPolicy.

Method next
Refresh the table to load next thread details.

Method fixed
Specify the index of the thread in the read-write scalar deadlockThreadViewFixedIndex and refresh the table to view the specified thread details.