Вот ссылка, связанная с вашей проблемой: используйте rss или vms для отслеживания памяти . Отношения RSS
и VMS
немного сбивают с толку. Вы можете узнать об этих понятиях в подробно . Вы также должны знать, как рассчитать общее использование памяти в , и , .
**TO SUMMARIZE AND COMPLEMENT MY OPINION**
:
RSS:
Размер резидентного набора используется, чтобы показать, сколько памяти выделено процессу в RAM
. Помните - It doesn't include memory which is swapped out
.
Включает память из общих библиотек, включая всю память стека и кучи.
VMS:
Размер виртуальной памяти включает всю память, к которой может обращаться процесс. К ним относятся:
Память, которая выгружается, память, которая выделена, но не используется, и память из общих библиотек.
Пример:
Предположим, что Process-X
имеет двоичный файл размером 500 К и связан с 2500 К общими библиотеками, имеет 200 К выделений стека / кучи, из которых 100 К фактически находится в памяти (rest заменяется или не используется), и он фактически загрузил только 1000 К общих библиотек и 400 К собственного двоичного файла:
RSS: 400K + 1000K + 100K = 1500K
VMS: 500K + 2500K + 200K = 3200K
В этом примере, поскольку часть памяти является общеймногие процессы могут использовать его, поэтому, если вы сложите все значения RSS
, вы можете легко получить больше места , чем в вашей системе.
Как вы можете видеть, когда выпросто запустите это;
import os
import psutil
process = psutil.Process(os.getpid())
print("vms: ", process.memory_info().vms)
print("rss:", process.memory_info().rss)
Вывод:
vms: 7217152
rss: 13975552
Путем простого добавления import pandas as pd
, вы можете увидеть разницу.
import os
import psutil
import pandas as pd
process = psutil.Process(os.getpid())
print("vms: ", process.memory_info().vms)
print("rss:", process.memory_info().rss)
Вот вывод:
vms: 276295680
rss: 54116352
Таким образом, выделенная память также может не находиться в RSS , пока она не будет фактически использована программой. Таким образом, если ваша программа выделяет кучу памяти заранее, то использует ее с течением времени:
- Вы можете увидеть RSS , идущий вверх и VMS оставаясь такими же .
Теперь, если вы идете с df.memory_usage().sum()
или Process.memory_info
, я думаю, что RSS
включает в себя память отдинамически связанные библиотеки. Таким образом, сумма их RSS
будет больше, чем фактическая используемая память.