【发布时间】:2014-04-11 22:39:51
【问题描述】:
我的程序正在死锁,这里是死锁的前 4 帧:
#0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:97
#1 0x00007f926250b7aa in _L_lock_12502 () at malloc.c:3507
#2 0x00007f926250a2df in malloc_atfork (sz=12, caller=<value optimized out>) at arena.c:217
#3 0x00007f926250881a in __libc_calloc (n=<value optimized out>, elem_size=<value optimized out>) at malloc.c:4040
我倾向于这是由我做错的事情引起的问题。当给服务器施加压力并将其提高到高使用水平时,我们会看到死锁,但否则我们无法重现这种情况。有谁知道这是什么错误造成的?
【问题讨论】:
-
malloc 是否有可能需要非常大的数字?(例如 3gb +)
-
@dheer: 你能显示死锁时所有线程的调用堆栈吗?从这个调用堆栈看来,这个线程正在等待某个被其他线程获取的锁。跨度>
-
如果子进程不立即覆盖程序映像,通常不可能在多线程程序中使用
fork()。典型的世界末日场景涉及一个多线程内存分配器,它会在分叉的进程中立即中断。 -
在您的
fork/clone调用站点周围发布其他线程和代码的堆栈跟踪会很有帮助。 -
@KerrekSB:这应该是一个答案。
标签: c multithreading malloc fork