Я провожу серьезное тестирование производительности анализатора двоичных файлов, который пишу на работе. После внедрения многопроцессорной обработки для значительного ускорения синтаксического анализа я сосредоточился на уменьшении объема памяти, который может стать значительным при сотнях тысяч файлов. Итак, вчера я установил крайне низкотехнологичный профилировщик памяти Python (запускать список задач как системную команду, перенаправить в файл, читать и анализировать файл) и настроить его на работу, чтобы проверить, не возникла ли у меня утечка памяти, которая постепенно нарастала время. Вот результаты.
Ответ на мой вопрос, кажется, нет, или, по крайней мере, не заметно. (Он сохраняет результаты в файл полок каждые несколько тысяч, отсюда и шаблон пилообразного сигнала) Но, очевидно, первое, что я заметил, был скачок 900 МБ, который все происходил когда-то с интервалом примерно в 90 секунд. Это напомнило мне еще одно событие, которое я записал в первый раз, когда проводил этот тест с большим объемом:
Только наоборот, конечно. В обоих случаях использование памяти увеличивается почти на 1 ГБ. Похоже, это не имеет никакого отношения к моей программе, поэтому мне, вероятно, не стоит слишком беспокоиться об этом. Но кто-нибудь знает, что может быть причиной этого?
ОБНОВЛЕНИЕ: я снова запустил массивный анализ, сохраняя регулярные журналы списка задач, отслеживая использование ОЗУ и используя RamMap. Список задач не нашел ничего необычного, что могло бы объяснить рост использования оперативной памяти. (График Excel ничего не нашел) Но используя RamMap, я думаю, что нашел виновника. Глядя на снимки моего использования памяти до и после массового разрыва (который произошел сразу после выхода моей программы на этот раз), я увидел, что категория "Mapped file" использует всю дополнительную память. В частности, временный файл, создаваемый моей программой (размер которого превысил 1 ГБ), доминировал в использовании памяти в этой категории; на вкладке "Сводка файлов" использовалось более 1 ГБ. Я изменил свою программу, чтобы сохранить результаты в этом файле специально, чтобы избежать чрезмерного использования памяти, так что, к сожалению, так оно и есть. Это потому, что я не закрывал файл между использованиями? Будет ли его открытие всегда загружать все это в память? (Он был создан с помощью модуля полки Python для хранения отображаемых данных) Это все еще, вероятно, не отвечает на вопрос о том, что произошло в диаграмме Excel, но это проблема, с которой я сталкиваюсь всю неделю.