-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
rwlock_rlock中死循环问题 #1356
Comments
几个问题:
最近修改原子操作,是在 #1317 。如果怀疑 rwlock 修改后的实现引入了 bug ,那么是否可以尝试单独把 rwlock.h 单个文件回滚到之前的版本 ( https://github.com/cloudwu/skynet/blob/bf8f9b8654fe5764b5249766b9f7611adb6e8dd0/skynet-src/rwlock.h ) 比较一下? 或者,可以定义 btw, 这个问题看起来和 #1353 有点类似,是否会是同一个问题? |
|
1,判断是在rwlock_rlock中死循环的原因是gdb看rwlock_rlock调用前后的两个值情况如下,rwlock_rlock调用后的hash的赋值还没有,不知道这样判断是否正确:
|
我觉得想判断是否是 rwlock 实现的 bug ,最简单的方法是定义 -DUSE_PTHREAD_LOCK 比较一下。这样方便确定问题。 |
好的,谢谢云大,我先修改为-DUSE_PTHREAD_LOCK再观察下 |
大概率重现步骤:
原因应该是 atomic.h中,如果定义了__STDC_NO_ATOMICS__。下面的宏定义不是原子操作的。 |
采用这个实现可以解决。但不知道还有没有更好的方法。 |
…t atomic operation. See cloudwu#1353 cloudwu#1356
这样是ATOM_INIT也要对应改成ATOM_STORE的宏定义不? |
|
我认为可以尝试把 |
好的,我将#define ATOM_INT int改成 #define ATOM_INT volatile int试试。之前为了得到更多debug信息,修改过编译选项为-g -O0,修改后观察了7天左右,那期间没出现过这种高CPU的情况,确实是有可能编译器优化导致 |
lua-bson.c 有ATOM_STORE(&oid_counter, c);是static ATOM_ULONG oid_counter;会出现问题吧。 |
lua-bson.c 那里不想对初始化做严格的原子处理,因为这里即使同时初始化两次也没有关系。object id 本质上是产生一个随机数,是什么都无所谓(已有的算法也无法严格保证 id 不重复)。 |
@iwifigame 目前 master 版本,我使用了你给的测试案例,无法重现问题。 |
新的代码,我测试了,暂时是没有再出现了 |
按照volatile的方案修改之后,目前观察了3天,暂时没出现CPU占用100%问题 |
最近将版本同步更新到目前master版本,测试时偶现进程CPU100%问题,看表现上是在rwlock_rlock中发生了死循环,gdb attach查看信息如下,麻烦帮忙看看什么情况:
The text was updated successfully, but these errors were encountered: