参考文档:
https://www.ctolib.com/topics/85107.html
https://twiki.cern.ch/twiki/bin/view/Main/PythonLoggingThreadingMultiprocessingIntermixedStudy
https://github.com/google/python-atfork
服务采用多线程+ 多进程+ logging的模式,服务偶然会出现死锁的子进程。
如下:
通过分析子进程死锁的原因是在子进程复制(multiprocessing中调用os.fork)的时候,会把主进程的logging中的锁也复制了一份,如果这个时候锁是被占用的,子进程的锁就一直是占用的,即使父进程中的锁被释放,也不行。子进程会一直阻塞在获得锁的状态,就没办法记日志了。
测试环境上跑的时候并没有复现这个问题,且线上环境死锁的现象也是偶发的,现需要想办法复现这个问题。
测试: