登录机器后发现进程还在,但 CPU 使用率为 0,也没有任何日志输出。用 gdb 附加上去一看,程序已经陷入死锁。
更诡异的是,卡住的位置竟然是 fork()。
1 2 3 4 5 6 7 8
(gdb) bt #0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95 #1 0x00007ffff73d0b17 in _L_lock_16342 () from /lib64/libc.so.6 #2 0x00007ffff73cd4b0 in __malloc_fork_lock_parent () at arena.c:240 #3 0x00007ffff740dadc in __libc_fork () at ../nptl/sysdeps/unix/sysv/linux/fork.c:123 #4 0x00000000004007e0 in fork_thread_start (arg=0x0) at lock.c:18 #5 0x00007ffff7bc6ea5 in start_thread (arg=0x7ffff4dfc700) at pthread_create.c:307 #6 0x00007ffff7446b0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
(gdb) thread apply all bt Thread 5 (Thread 0x7ffff4dfc700 (LWP 43257)): #0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95 #1 0x00007ffff73d0b17 in _L_lock_16342 () from /lib64/libc.so.6 #2 0x00007ffff73cd4b0 in __malloc_fork_lock_parent () at arena.c:240 #3 0x00007ffff740dadc in __libc_fork () at ../nptl/sysdeps/unix/sysv/linux/fork.c:123 #4 0x00000000004007e0 in fork_thread_start (arg=0x0) at lock.c:18 #5 0x00007ffff7bc6ea5 in start_thread (arg=0x7ffff4dfc700) at pthread_create.c:307 #6 0x00007ffff7446b0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
Thread 4 (Thread 0x7ffff55fd700 (LWP 43256)): #0 0x00007ffff740d9fd in nanosleep () at ../sysdeps/unix/syscall-template.S:81 #1 0x00007ffff740d894 in __sleep (seconds=0) at ../sysdeps/unix/sysv/linux/sleep.c:137 #2 0x00000000004007ff in fork_thread_start (arg=0x0) at lock.c:24 #3 0x00007ffff7bc6ea5 in start_thread (arg=0x7ffff55fd700) at pthread_create.c:307 #4 0x00007ffff7446b0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
Thread 3 (Thread 0x7ffff5dfe700 (LWP 43255)): #0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95 #1 0x00007ffff73d0e18 in _L_lock_21569 () from /lib64/libc.so.6 #2 0x00007ffff73cf803 in __malloc_trim (s=0) at malloc.c:4536 #3 0x00000000004007c3 in thread_start (arg=0x0) at lock.c:11 #4 0x00007ffff7bc6ea5 in start_thread (arg=0x7ffff5dfe700) at pthread_create.c:307 #5 0x00007ffff7446b0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
Thread 2 (Thread 0x7ffff65ff700 (LWP 43254)): #0 0x00007ffff740d9fd in nanosleep () at ../sysdeps/unix/syscall-template.S:81 #1 0x00007ffff740d894 in __sleep (seconds=0) at ../sysdeps/unix/sysv/linux/sleep.c:137 #2 0x00000000004007cd in thread_start (arg=0x0) at lock.c:13 #3 0x00007ffff7bc6ea5 in start_thread (arg=0x7ffff65ff700) at pthread_create.c:307 #4 0x00007ffff7446b0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
Thread 1 (Thread 0x7ffff7fecf00 (LWP 43253)): #0 0x00007ffff7bc8017 in pthread_join (threadid=140737326872320, thread_return=0x0) at pthread_join.c:90 #1 0x0000000000400888 in main () at lock.c:39