brpc icon indicating copy to clipboard operation
brpc copied to clipboard

EventDispatcher Run调用epoll_wait导致cpu持续高

Open chongg039 opened this issue 3 years ago • 1 comments

Describe the bug (描述bug) 我有一个主服务,会启动一个bthread线程执行某些脚本,过程中会有一些fork行为。此外会启动另一个bthread线程,来获取脚本进程的系统资源使用(cpu、rss等)。当触发某些条件时,会杀掉脚本进程组,两个bthread线程会自行退出。

但是当bthread线程return后,主服务进程的cpu便会持续升高,gdb发现有一个LWP会call EventDispatcher,一个持续epoll_wait的行为会占满100%cpu,并且LWP的id会发生变化。

top -Hp信息

gdb信息:

perf top信息:

bthread前后信息: 运行时信息:

杀死脚本进程,两个bthread退出后信息:

To Reproduce (复现方法)

Expected behavior (期望行为) 导致cpu升高的原因是什么,如何避免?

Versions (各种版本) OS: linux 4.19 Compiler: gcc-4.9.2 brpc: 0.9.7 protobuf: 2.4.1

Additional context/screenshots (更多上下文/截图)

chongg039 avatar Mar 03 '22 08:03 chongg039

event dispatcher是跑在bthread中的,所以LWP id是可能会变化的。 可以perf一下那个线程看看么,画个火焰图贴上来

lorinlee avatar Mar 03 '22 12:03 lorinlee