我们正在观察Linux RedHat计算机上的一个Java应用程序在尝试发布到外部MQ队列时出现异常延迟(以前从未发生过)。快速检查盒子和CPU /内存使用情况似乎很好。 MQ盒子也很好。重启我的Java进程,没有运气!之后我们抓取了一个快速的strace
快照,并且它充满了futex()
次来电。
想知道是否有人可以提供任何关于为什么会发生这么多锁定的线索(我知道这是一个非常开放的问题。取决于应用程序实际上做了什么)。
但我希望能更深入地了解这个问题。
答案 0 :(得分:2)
您是否真的对其进行了分析并确定futex调用是瓶颈?
假设你做了,有一件事可能是futex()系统调用意味着互斥锁是争用的; FUTEX =快速用户空间互斥,在没有系统调用的情况下在用户空间中处理无竞争互斥锁。也就是说,您可能遇到锁争用问题。