进程死锁不响应信号
问题现象
线上发现一个进程的某个端口没有监听,进程很久没有重启了。
排查过程
线上进程会每日重启,发送重启信号有漏掉该进程?
使用strace 命令跟踪重启命令,发现命令有kill 重启信号至该进程,只是该进程没有响应该信号
查看进程 status cat /proc/pid/status
进程没有处于不可中断睡眠状态 D,
查看进程 stack cat /proc/pid/stack 处于futex_wait 状态
进程 信号掩码集也正常
kill -15 该进程也没有响应,直接使用gdb -p 该进程, 发现产生了进程死锁,在信号处理函数里面调用了thread_unsafe 函数 有可能死锁 也有可能coredump
#0 0x00007f19d72c4eec in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x00007f19d724205d in _L_lock_14730 () from /lib64/libc.so.6
#2 0x00007f19d723f163 in malloc () from /lib64/libc.so.6
#3 0x00007f19d724594a in strdup () from /lib64/libc.so.6
#4 0x00007f19d726ec51 in tzset_internal () from /lib64/libc.so.6
#5 0x00007f19d726f613 in __tz_convert () from /lib64/libc.so.6
#6 0x000000000043b3b8 in _db_print ()
#7 0x0000000000493dfa in XXX ()
#8 0x000000000049dad8 in death ()
#9 <signal handler called>
#10 0x00007f19d723c4e2 in _int_malloc () from /lib64/libc.so.6
#11 0x00007f19d723fb64 in calloc () from /lib64/libc.so.6
#12 0x00000000004bd57a in xcalloc ()