我们有 10 名工作人员处理用户的连接。Worker 是在 Perl 中实现的,使用FCGI
和FCGI::ProcManager
。
有时,一名工作人员会停止处理连接。Strace 显示:
futex(0x7fa9ebde0e80, FUTEX_WAIT_PRIVATE, 2, NULL
那就是它睡觉,等待一个futex。
工人永远不会从等待中返回。
如果我们用
kill -9
然后它的父母收获它。返回码等于 9。
我们的项目是高负荷的。这个问题很少出现。
According to futex man page:
This system call is typically used to implement the contended case of a lock in shared memory, as described in futex(7)
So my first question: is your Perl script using "Perl Threads" and are you having contention on a shared memory variable?