У меня есть Twisted сервер под нагрузкой.Когда сервер находится под нагрузкой, использование памяти увеличивается, и она никогда не восстанавливается (даже если клиентов больше нет).В следующий раз, когда нагрузка увеличивается, использование памяти снова увеличивается.Вот снимок ситуации на тот момент:
- Объем памяти RSS составляет 400 МБ (должно быть 200 МБ при обычном максимальном количестве клиентов).
- gc.garbage пусто, поэтому нет объектов, которые невозможно собрать.
- Использование objgraph.py не показывает очевидных кандидатов на утечки (нет заметного различия между нормальным, исправным процессом и процессом с утечкой).
- Использование pympler показывает несколько десятков МБ (только), используемых объектами Python (в основном, dict, list, str и других собственных контейнеров).
Valgrind с включенной проверкой на утечку = полная не показывает каких-либо значительных утечек (только пара МБ «окончательно потеряна»), поэтому расширения C не являются виновником.Общая память также не складывается с 400 МБ +, показанным top :
==23072== HEAP SUMMARY:<br>
==23072== in use at exit: 65,650,760 bytes in 463,153 blocks<br>
==23072== total heap usage: 124,269,475 allocs, 123,806,322 frees, 32,660,215,602 bytes allocated
Единственное объяснение, которое я могу найти, эточто некоторые объекты не отслеживаются сборщиком мусора, поэтому они не отображаются objgraph и pympler, но используют огромное количество оперативной памяти.
Какие еще инструменты или решения у меня есть?Поможет ли компиляция интерпретатора Python в режиме отладки с помощью sys.getobjects?