Процесс блокируется мьютексом (или фьютексом в языке Linux). Так что отставание в порядке, мы буквально застряли за системным вызовом, и, хотя соединения разрываются, больше ничего не обновляется.
В будущем для ссылки на другие, обнаружившие этот вопрос, это была команда прорыва:
# strace -p 5340
Process 5340 attached
futex(0x223cee0, FUTEX_WAIT_PRIVATE, 0, NULL
Итак, есть какая-то тупиковая ситуация, и теперь мне нужно только выяснить, какой процесс использует мьютексы. gdb
в конце концов дал мне эту информацию:
(gdb) bt
#0 sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
#1 0x00007f0ecc982068 in PyThread_acquire_lock () from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
#2 0x00007f0ecd037b29 in gil_real_get () from /usr/lib/uwsgi/plugins/python_plugin.so
#3 0x00007f0ecd030167 in uwsgi_python_master_fixup () from /usr/lib/uwsgi/plugins/python_plugin.so
#4 0x000000000042cb66 in uwsgi_respawn_worker ()
#5 0x000000000042b38f in master_loop ()
#6 0x000000000046741e in uwsgi_run ()
#7 0x000000000041698e in main ()
Итак, какая-то тупиковая ситуация при попытке получить глобальную блокировку интерпретатора.
Edit 2 : сюжет становится более толстым. Почти та же проблема, что и этот парень , за исключением того, что наша проблема связана с RabbitMQ, а не с MongoDB. Запуск второго потока вызывает проблемы во время перезагрузки, иногда из-за того, что GIL не освобождается, а затем зависает при попытке его повторного получения.
По сути, мы делаем то, чего делать не должны, и нам просто нужно все это переосмыслить.