Як з допомогою GDB дебагера з’ясувати чому ваш Python процес завис

Зовсім недавно на одному з клієнтських проектів (http://www.ihoppers.com) ми мали проблемку із зависанням Python сервера. Під “зависанням” мається на увазі ситуація, коли процес “з’їдає” весь ресурс процесора і забирає необмежену кількість часу. Після того як усі потоки в межах даного процесу сервера зайняті аплікація повністю перестає обслуговувати відвідувачів.

Debugging with GDB

Фото взято з uplifted.net

Проект написаний на Plone CMS і обслуговується на Ubuntu сервері. Тому дана техніка дебагу була застосована саме для дослідження Python процесу на Лінуксі.

Зазвичай, коли є потреба подебажити те чи інше місце в Пітон коді я використовую pdb – Python дебагер. З допомогою нього ставлю точку зупинки в програмі, і вже там на місці досліджую змінні середовища, що не так, і т.д… Зазвичай працює добре! Чому ж тоді цього разу я звернувся за допомогою до GDB інструменту?

Проблему із зависанням процесу було важко відтворити як на розробницьких так і на продакшин машинах з реальною базою даних. Могло бути так що 3 рази на день трапляється після того як хтось поредагував контент на сайті, а могло бути так що 2 тижні все спокійно і ніяких глюків.

Тому прийшлось шукати інших способів розбору проблеми, зокрема можливості залісти напряму в процес, що завис і використовує 100% процесора, без його попередньої зупинки чи рестарту.

Далі до Інструкції і Відео по використанні GDB дебагера →