*** glibc detected ***

现象:
今天线上一台服务器的php打算升级到php5.5,导入流量后,在php的error log中出现了一些 glibc delected错误。
如:
*** glibc detected *** ./test: double free or corruption (fasttop): 0x00000000049cc010 ***

原因:
重复free

示例:


#include"stdio.h"
#include "stdlib.h"
#include "errno.h"
#include "netdb.h"
#include "sys/types.h"
#include "netinet/in.h"
#include<sys/types.h>  /*提供类型pid_t,size_t的定义*/
#include<sys/stat.h>
#include<fcntl.h>
int main (int argc, char *argv[]){
    char *chr;
    chr = (char *)malloc(10*sizeof(char));
    free(chr);
    free(chr);
}

上面的代码编译后,执行会出现如下错误:


[root@localhost c]# gcc ./test.c -o ./test
[root@localhost c]# ./test
*** glibc detected *** ./test: double free or corruption (fasttop): 0x00000000049cc010 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3dfbc7166f]
/lib64/libc.so.6(cfree+0x4b)[0x3dfbc7589b]
./test[0x400507]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x3dfbc1d9c4]
./test[0x400429]
======= Memory map: ========
00400000-00401000 r-xp 00000000 fd:00 1081356                            /root/test/c/test
00600000-00601000 rw-p 00000000 fd:00 1081356                            /root/test/c/test
049cc000-049ed000 rw-p 049cc000 00:00 0                                  [heap]
3dfb800000-3dfb81c000 r-xp 00000000 fd:00 1736741                        /lib64/ld-2.5.so
3dfba1c000-3dfba1d000 r--p 0001c000 fd:00 1736741                        /lib64/ld-2.5.so
3dfba1d000-3dfba1e000 rw-p 0001d000 fd:00 1736741                        /lib64/ld-2.5.so
3dfbc00000-3dfbd4f000 r-xp 00000000 fd:00 1736747                        /lib64/libc-2.5.so
3dfbd4f000-3dfbf4e000 ---p 0014f000 fd:00 1736747                        /lib64/libc-2.5.so
3dfbf4e000-3dfbf52000 r--p 0014e000 fd:00 1736747                        /lib64/libc-2.5.so
3dfbf52000-3dfbf53000 rw-p 00152000 fd:00 1736747                        /lib64/libc-2.5.so
3dfbf53000-3dfbf58000 rw-p 3dfbf53000 00:00 0 
3e0d200000-3e0d20d000 r-xp 00000000 fd:00 1736868                        /lib64/libgcc_s-4.1.2-20080825.so.1
3e0d20d000-3e0d40d000 ---p 0000d000 fd:00 1736868                        /lib64/libgcc_s-4.1.2-20080825.so.1
3e0d40d000-3e0d40e000 rw-p 0000d000 fd:00 1736868                        /lib64/libgcc_s-4.1.2-20080825.so.1
2ae478170000-2ae478172000 rw-p 2ae478170000 00:00 0 
2ae478185000-2ae478186000 rw-p 2ae478185000 00:00 0 
7fff3d24b000-7fff3d260000 rw-p 7ffffffe9000 00:00 0                      [stack]
7fff3d34e000-7fff3d352000 r-xp 7fff3d34e000 00:00 0                      [vdso]
ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0                  [vsyscall]
Aborted

方案:
在默认的情况下,产生这个错误的程序也会被中止。但是,这(以及是否产生错误信息)可以通过环境变量 MALLOC_CHECK_ 来控制。以下的设置是被支持的:
0 — 不产生错误信息,也不中止这个程序
1 — 产生错误信息,但是不中止这个程序
2 — 不产生错误信息,但是中止这个程序
3 — 产生错误信息,并中止这个程序
备注
如果 MALLOC_CHECK_ 被设置为除 0 以外的值,这会使 glibc 进行更多的检查并可能影响到系统的性能。
export MALLOC_CHECK_=0

类似的错误还有:
*** glibc detected *** php-fpm: pool www: corrupted double-linked list: 0x0000000002150b10 ***"


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值