问题描述:
在服务器上,概率(一个月1次)出现,某个服务停摆了,日志上看,没有任何报错,而且服务进程也在,只是无响应了。
问题分析:
1,用strace命令查看,发现当前进程阻塞在系统API上, futext_wait_queue_me
2, 用gdb命令 attach 当前阻塞进程,bt显示 call trace,发现是syslog系统调用出现了死锁。
3,进一步分析,发现,某个函数在外部流程和信号处理函数(定时任务)中都调到了,而这个函数内部,调用了syslog输出日志。
4,结论:服务进程和信号处理函数同时调用syslog,可能导致死锁。
问题验证:
点击(此处)折叠或打开
1. #include
2. #include
3. #include
4. #include
5. #include
6. #include
7. #include
8. #include
9. #include
10. #include
11. #include
12. #include
13. #include
14. #include
15.
16. intidx\=0;
17. static void sigroutine(intsigno)
18. {
19. char\*logcnt