When requesting VM-wide locks ( Shared Locks), the following points must be considered:
If another lock is requested within an area protected by a shared lock, and the wrong sequence is used, a deadlock may result.
If a VM-wide garbage collection ( Shared Garbage Collection) is active, a VM that has just requested a shared lock must first contribute to the garbage collection before it can receive the shared lock. To enable this to happen, the lock request is not allowed to block.
If a timeout occurs at the first attempt to receive the lock, the VM enters a loop during which control is relinquished for a short time, and the lock request is repeated.
The number of loops can be limited with the parameter vmcj/nested_lock_loops:
Work area |
VM container |
Unit |
Integer value |
Standard value |
-1 |
Dynamically changeable |
Local and on all servers |
The following values are permitted:
-1:Endless attempts are made to set the lock.
n>= 0: Maximum number of attempts to set the lock. Each attempt lasts for about one second. If the lock still could not be set after n number of attempts, the lock request is rejected.
Only change the parameter if you are sure that there really is a deadlock, and then try to solve the problem.