-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
疑似覆盖pthread_mutex_trylock后与jemalloc造成死锁 #2726
Comments
试一下#2727 看看还有没有问题。 |
首先,感谢你的回复与支持。 https://github.com/fausturs/test-brpc-jemalloc 从给出的修复来看,似乎是通过宏NO_PTHREAD_MUTEX_HOOK控制是否去覆盖pthread的符号。那么完全不覆盖pthread的mutex符号的时候,我想本issue的这个问题应该OK了。 此外我有一点点好奇,对于brpc中,为什么要去hack pthread中的mutex相关符号呢,好处是什么?是能够在真正调用pthread之前,能够进行一些额外的统计信息吗?那是不是当我设置NO_PTHREAD_MUTEX_HOOK时,对pyhread mutex的操作,可能会更快? |
主要是通过__dl_sym来hook,避免_dlerror_run申请内存导致malloc库死锁。不需要NO_PTHREAD_MUTEX_HOOK宏应该也是没问题的了。NO_PTHREAD_MUTEX_HOOK跟这个issue关系不大,主要解决没法调整动态库加载顺序导致找不到pthread_mutex_*符号的问题。
hook pthread mutex是为了支持contention profiler和worker潜在死锁问题的检测。
没开contention profiler的情况下,只是多了一个判断和线程局部变量加减,性能应该没有差别的。 |
我通过我上述的小demo,使用 再次感谢你的回复,与支持。 |
好的,感谢反馈! |
…ock (#41891) BRPC contention profiler hooks pthread mutex, which may deadlock when used with Jemalloc. This PR remove pthread mutex hook and disable BRPC contention profiler. ![image](https://github.com/user-attachments/assets/62ccc04c-718a-43db-8354-b1bbc0565958) similar issue: apache/brpc#2726 reference fix: apache/brpc#2727
…ock (apache#41891) BRPC contention profiler hooks pthread mutex, which may deadlock when used with Jemalloc. This PR remove pthread mutex hook and disable BRPC contention profiler. ![image](https://github.com/user-attachments/assets/62ccc04c-718a-43db-8354-b1bbc0565958) similar issue: apache/brpc#2726 reference fix: apache/brpc#2727
Describe the bug (描述bug)
我们尝试使用了一下brpc的最新的代码。包含了这个commit
e0c9c44
这个commit中,覆盖了pthread_mutex_trylock这个符号,同时我们使用了jemalloc(5.2.1),,疑似导致死锁了
这是我们的栈,
可以看到
第24帧是,jemalloc中进行pthread_mutex_trylock,然后进入了第23帧brpc,然后自然的进入到了第16帧开始调用__dlsym, 然后第15帧调用了_dlerror_run。
然后第14帧调用到了calloc,又重新进入到jemalloc,然后第8帧进入到和24帧同一个位置进行trylock,此时应该死锁了。
从代码中的一段注释(https://github.com/apache/brpc/blob/b4d4acb7cd9a677039f662f18df37d4be7172ed3/src/bthread/mutex.cpp#L390)来看,
看上去是类似的行为。
这个问题有什么办法可以修复一下吗?
To Reproduce (复现方法)
Expected behavior (期望行为)
Versions (各种版本)
OS:
Compiler:
brpc:
protobuf:
Additional context/screenshots (更多上下文/截图)
这是我们使用的jemalloc的源代码的161行所处的位置。
The text was updated successfully, but these errors were encountered: