-
Notifications
You must be signed in to change notification settings - Fork 3.6k
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
signal 7 (SIGBUS), code 2 (BUS_ADRERR) #204
Comments
什么机型 什么操作系统,是否必现 |
有4.4.2 5.0 5.1.1 6.0 6.0.1 不是必现的问题 机型有小米 OPPO 酷派等 |
同样遇到了这个错误
知道是什么原因吗? |
@FelixZhang00 @buptlingfeng 已经在灰度验证了,因为我这边没看到这个类型的crash,麻烦 @buptlingfeng 有进度同步一下 |
@FelixZhang00 <https://github.com/FelixZhang00>
你对xlog进行过定制没有?我是做过一些定制,你用的如果是原生的xlogSDK那么就是需要xlog团队仔细看下了。你是在本地测试出现的还是在线上测试发现的呢?
2017-05-05 17:16 GMT+08:00 garryyan <[email protected]>:
… @FelixZhang00 <https://github.com/FelixZhang00> @buptlingfeng
<https://github.com/buptlingfeng> 已经在灰度验证了,因为我这边没看到这个类型的crash,麻烦
@buptlingfeng <https://github.com/buptlingfeng> 有进度同步一下
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#204 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEk0IownH2okf7EfeL9kVOLkXhMeIN-Zks5r2ujSgaJpZM4M67Sp>
.
|
可不可以本地复现?
在 2017年5月5日 下午5:29,凌风 <[email protected]>写道:
… @FelixZhang00 <https://github.com/FelixZhang00> 你对xlog进行过定制没有?我是做过一些定制,
你用的如果是原生的xlogSDK那么就是需要xlog团队仔细看下了。你是在本地测试出现的还是在线上测试发现的呢?
2017-05-05 17:16 GMT+08:00 garryyan ***@***.***>:
> @FelixZhang00 <https://github.com/FelixZhang00> @buptlingfeng
> <https://github.com/buptlingfeng> 已经在灰度验证了,因为我这边没看到这个类型的crash,麻烦
> @buptlingfeng <https://github.com/buptlingfeng> 有进度同步一下
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#204 (comment)>, or mute
> the thread
> <https://github.com/notifications/unsubscribe-auth/AEk0IownH2okf7EfeL9kVOLkXhMeIN-Zks5r2ujSgaJpZM4M67Sp>
> .
>
|
是线上测试的,本地没有出现过。 |
我只修改了写日志的策略,用多个文件回滚记录。 |
@FelixZhang00 改了xlog的代码? |
改了appender.cc的部分代码,和LogBuffer的__Clear方法:
|
有没有可能这里__appender_async在栈上分配了较大的内存导致的? |
这个在源码中只有16K 应该不至于吧 我之前是改成在堆上开辟空间 解决出现这个问题,现在我正在测试 放在栈里边。因为他们微信使用说没遇到这个问题
那就说不通了 安说我们的机型覆盖不会又微信那么全,既然微信没问题 所以我就怀疑是因为我这边导致的。
2017-05-05 17:35 GMT+08:00 Fei Zhang <[email protected]>:
… 有没有可能这里__appender_async
<https://github.com/Tencent/mars/blob/master/mars/log/src/appender.cc#L537>
在栈上分配了较大的内存导致的?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#204 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEk0IndXkFpznVZ18Y1pnl21CaY-jHTwks5r2u18gaJpZM4M67Sp>
.
|
有没有可能是同时有太多线程调用__appender_sync方法导致的?我这边先模拟试一下 |
这个我试过了 本地也都没出现,我觉的最好是不要对xlog做任何改动,在线上run一把试试
2017-05-05 17:43 GMT+08:00 Fei Zhang <[email protected]>:
… 有没有可能是同时有太多线程调用__appender_sync方法导致的?我这边先模拟试一下
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#204 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEk0Ilol12FrRRihm3u84VZWKq4tyc6Uks5r2u9agaJpZM4M67Sp>
.
|
@garryyan 这个跟ndk的版本有关吗?编译xlog需要哪个ndk版本? |
@FelixZhang00 应该没什么关系, 我们一般用r11c |
囧 我用的r13b 感觉真有可能哎,在线上一直存在这个问题
2017-05-08 14:28 GMT+08:00 garryyan <[email protected]>:
… @FelixZhang00 <https://github.com/FelixZhang00> 应该没什么关系, 我们一般用r11c
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#204 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEk0IiBCJDATHJ0pDJJPE9NGCmn-W2hpks5r3rYqgaJpZM4M67Sp>
.
|
BUS_ADRERR在这篇文章的解释是:
产生这个问题的原因可能是mmap文件被删掉了吗? 是不是说我通过shell删除log.mmap2,但是系统发现还有进程在读写它,就把它标记为deleted,其实文件还是存在的, 如果这一点是系统来控制的,就有一定概率造成mmap文件被删掉了,但还有进程在读写它对应的内存,因为这块内存的back文件不存在了,就会造成BUS_ADRERR错误。 |
这里产生这个问题的原因有两种: 1. 内存对齐的问题 2. mmap越界 你说的这个删除的问题和mmap文件无关,和linux的文件系统有关,一般来说删除一个文件只是把这一块标记为可重用,并不是彻底丢掉。在覆盖重写之前,这一块数据其实一直还在存储上,只不过是不可达的,但是如果在删除前已有文件句柄指向,即使删除文件后这个句柄依然有效。 |
我测试了几种case,现在只有怀疑mmap越界
在 2017年5月8日 下午5:56,garryyan <[email protected]>写道:
… 这里产生这个问题的原因有两种: 1. 内存对齐的问题 2. mmap越界
你说的这个删除的问题和mmap文件无关,和linux的文件系统有关,一般来说删除一个文件只是把这一块标记为可重用,并不是彻底丢掉。在覆盖重写之前,
这一块数据其实一直还在存储上,只不过是不可达的,但是如果在删除前已有文件句柄指向,即使删除文件后这个句柄依然有效。
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#204 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEk0ItRo8GcJ2MHIdsNM1GTXtIAmSCqRks5r3ua0gaJpZM4M67Sp>
.
|
因为把mmap用char数组替换掉之后就完全没碰到过signal 7的错误
在 2017年5月8日 下午7:08,凌风 <[email protected]>写道:
… 我测试了几种case,现在只有怀疑mmap越界
在 2017年5月8日 下午5:56,garryyan ***@***.***>写道:
> 这里产生这个问题的原因有两种: 1. 内存对齐的问题 2. mmap越界
>
> 你说的这个删除的问题和mmap文件无关,和linux的文件系统有关,一般来说删除一个文件只是把这一块标记为可重用,并不是
> 彻底丢掉。在覆盖重写之前,这一块数据其实一直还在存储上,只不过是不可达的,但是如果在删除前已有文件句柄指向,即使删除文件后这个句柄依然有效。
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#204 (comment)>, or mute
> the thread
> <https://github.com/notifications/unsubscribe-auth/AEk0ItRo8GcJ2MHIdsNM1GTXtIAmSCqRks5r3ua0gaJpZM4M67Sp>
> .
>
|
@buptlingfeng 你的意思是这样初始化: char *buffer = new char[kBufferBlockLength];
sg_log_buff = new LogBuffer(buffer, kBufferBlockLength, true);
use_mmap = false; |
是的 我验证的结果是这样的,用这种方式就再没出现过signal 7的错误
2017-05-08 19:12 GMT+08:00 Fei Zhang <[email protected]>:
… @buptlingfeng <https://github.com/buptlingfeng> 你的意思是这样初始化:
char *buffer = new char[kBufferBlockLength];
sg_log_buff = new LogBuffer(buffer, kBufferBlockLength, true);
use_mmap = false;
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#204 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEk0ItwV20QvPGR-7NATcHVmCBwb5OPTks5r3vi5gaJpZM4M67Sp>
.
|
翻过来,模拟过mmap越界操作吗?必现crash? |
这个问题已查明。 注意:日志不要放在这个目录,不然就太占 data 空间了。缓存目录类似日志目录,要单独目录,防止清理逻辑误删其他文件 |
我这里缓存路径是传空的,我改下试试。 |
@buptlingfeng 你们也没有传缓存路径吗 |
也没有 接下来灰度要试一下
2017-06-19 13:02 GMT+08:00 Fei Zhang <[email protected]>:
… @buptlingfeng <https://github.com/buptlingfeng> 你们也没有传缓存路径吗
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#204 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEk0Ij_-3EJ7zF79X6DcymUYbU6KL4Pnks5sFgEBgaJpZM4M67Sp>
.
|
我设置了缓存路劲,现在有丢日志的现象; |
@logwee 你的缓存路径设置的是什么? |
@garryyan /data/data/package/files/xlog 下 |
package没换成你自己的包名吗? 换成自己的包名!否则 怎么可能有权限 |
@garryyan 当然是自己的包名。 |
怎么看出丢日志的? |
找到原因了,我的问题 |
线上测试的时候发现 void LogBuffer::Flush(AutoBuffer& _buff) 调用 void LogBuffer::Clear()的时候出现上述的错误,具体抛错的地方是在执行memset(buff.Ptr(), 0, buff.MaxLength());的时候出现的
The text was updated successfully, but these errors were encountered: