У меня давно запущен процесс CPython 3.8. Через некоторое время он использует огромное количество оперативной памяти. Я пробовал
- запустить g c .collect ()
- с помощью pympler, чтобы обнаружить все известные Python объекты
import gc
import psutil
from pympler import muppy, summarize
gc.collect()
total_ram = psutil.Process().memory_info().rss
all_objects = muppy.get_objects(include_frames=True)
s = summary.summarize(all_objects)
python_objects_size = sum(row[2] for row in s)
Вывод : 102 MiB Python объектов, 824 MiB RSS-памяти!
[РЕДАКТИРОВАТЬ] 3. с помощью tracemalloc; который также возвращает ~ 100 МБ python объектов
[EDIT 2] export PYTHONMALLOC=malloc
не решает проблему.
Есть ли способ запросить CPython память менеджер, чтобы выяснить
- , сколько оперативной памяти он держит, чтобы я мог вычесть его из RSS и выяснить, есть ли какая-либо библиотека C, которая не использует PyMem_Mallo c и утечка
- Почему он удерживает память (например, выяснилось, что он содержит страницу размером 64 КБ из-за одного 20-байтового PyObject, на который все еще ссылаются)
- Идентифицировать C модули, которые вызывали PyMem_Mallo c и никогда не освобождали память после этого
- Отслеживайте mallo c () и free () на уровне ОС и сравнивайте их с теми, которые выполняются pymallo c, чтобы выяснить, есть ли библиотека C, которая выделяет память не с помощью PyMem_Mallo c
Связанные