升级到 RHEL 6.6、7.0 或 7.1 可能导致使用 futexes 的应用程序在 futex_wait ()中出现停滞。
Issue
- 带有 pThreads 的软锁定,Haswell CPU 和 PowerPC CPU 上的 Mutex (但可能不仅限于这些)
- 升级到 Red Hat Enterprise Linux 6.6 (特别是到 2.6.32-504 ,并包括 2.6.32-504.12.2)可能导致应用程序挂起。
- 无法使用
kill -3
得到线程转储。 - 运行
kill -3
没有响应。 - 检查
/proc/
显示所有线程都卡在等待 futex。例如:
Where nnnn = the PID # of the parent task in question
mmmm = the PID # of the thread task
Note. Under the parent /proc/nnnn/task structure you will see the PID's of all of the threads including the parents number repeated.
cat /proc/nnnn/task/mmmm/stack
[<ffffffff810b226a>] futex_wait_queue_me+0xba/0xf0
[<ffffffff810b33a0>] futex_wait+0x1c0/0x310
[<ffffffff810b4c91>] do_futex+0x121/0xae0
[<ffffffff810b56cb>] sys_futex+0x7b/0x170
[<ffffffff8100b072>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
- 附加
gdb
或strace
导致应用程序唤醒并继续处理。
Environment
- Red Hat Enterprise Linux (RHEL) 6.6, 7.0 和 7.1
-
应用程序使用带有私有用户空间 futex 锁定的 syscall FUTEX
- 不会影响共享的或 Inode Futex 锁定
-
其他可能的软件包可能包括:
- IBM JDK 6 32-bit
- Oracle JDK 7 64-bit
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.