RHEL 6.6、7.0、または 7.1 にアップグレードすると、futex を使用しているアプリケーションが futex_wait() で停止する
Issue
- Haswell CPU および PowerPC CPU において、pThreads や Mutexes でソフトロックアップが発生します (他の CPU でも発生する可能性があります)。
- Red Hat Enterprise Linux 6.6 (特に 2.6.32-504.12.2 を含む 2.6.32-504 まで) にアップグレードするとアプリケーションがハングする可能性があります。
kill -3
を使用してスレッドダンプを取得できません。kill -3
を実行しても反応がありません。/proc/
を調べると、すべてのスレッドが futex を待って停止しているのが分かります。たとえば、以下のような場合です。
/proc/1234/task/12345=[<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
-
Private Userspace futex ロックを持つ syscall FUTEX をアプリケーションが使用している
- Shared または 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.