Утечка памяти в Python Twisted: где это? - PullRequest
13 голосов
/ 02 ноября 2010

У меня есть 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?

1 Ответ

2 голосов
/ 02 ноября 2010

Если код протекает только под нагрузкой (вы это проверили?), Я бы посмотрел все места, где буферизуются сообщения.Увеличивается ли использование памяти самого процесса?Или увеличивается использование памяти системой?Если это последний случай, ваш сервер может просто быть слишком медленным, чтобы не отставать от входящих сообщений и переполнения буфера ОС ..

...