Моя Ubuntu ест больше памяти, чем показывает диспетчер задач:
sudo ps -e --format rss | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29
free -m
total used free shared buffers cached
Mem: 3860 2765 1094 0 3 300
-/+ buffers/cache: 2461 1398
Swap: 2729 2374 354
Это странно. Может кто-нибудь объяснить эту разницу?
Но что более важно: я хотел бы знать, сколько памяти реально использует процесс. Я не хочу знать размер виртуальной памяти, а скорее резидентную память плюс обмен процессом.
Я также попытался вывести параметр формата "sz" из "ps", но сумма этого значения слишком высока (16000 МБ) (параметр "размер" дает 36700 МБ). Есть ли другие варианты?
Я действительно хочу использовать это, чтобы определить, какие программы / процессы потребляют много памяти (и поменять местами), чтобы убить их, потому что память ценна :-) Это просто действительно не имеет смысла, поэтому я спрашиваю здесь.
Вывод / proc / meminfo:
MemTotal: 3952812 kB
MemFree: 1119192 kB
Buffers: 2676 kB
Cached: 290068 kB
SwapCached: 160980 kB
Active: 1805396 kB
Inactive: 731680 kB
Active(anon): 1745820 kB
Inactive(anon): 689184 kB
Active(file): 59576 kB
Inactive(file): 42496 kB
Unevictable: 148 kB
Mlocked: 148 kB
SwapTotal: 2795272 kB
SwapFree: 390900 kB
Dirty: 1984 kB
Writeback: 0 kB
AnonPages: 2085472 kB
Mapped: 67432 kB
Shmem: 190676 kB
Slab: 88012 kB
SReclaimable: 42704 kB
SUnreclaim: 45308 kB
KernelStack: 5496 kB
PageTables: 87860 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4771676 kB
Committed_AS: 9522364 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 374404 kB
VmallocChunk: 34359330144 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 61440 kB
DirectMap2M: 4030464 kB
Ответы:
Система виртуальной памяти Linux не так проста. Вы не можете просто сложить все RSS поля и получить значение , указанное
used
наfree
. Для этого есть много причин, но я выберу пару самых важных.Когда процесс разветвляется, родитель и потомок будут показывать один и тот же RSS. Однако в Linux используется
copy-on-write
так, что оба процесса действительно используют одну и ту же память. Только когда один из процессов модифицирует память, он будет фактически дублирован. Таким образом, это приведет к тому, чтоfree
число будет меньшеtop
суммы RSS.Значение RSS не включает общую память. Поскольку разделяемая память не принадлежит ни одному процессу,
top
не включает ее в RSS. Таким образом, это приведет к тому, чтоfree
число будет большеtop
суммы RSS.источник
Я думаю, что вам лучше доверять выводу «free», насколько вам нужно общее использование памяти, и доверять «ps» для общего представления о том, сколько памяти использует один процесс.
Тот факт, что сумма значений RSS «ps» не равна «свободным», не мешает вам сортировать ваши процессы по RSS и оценивать самые большие из них для убийства.
Тем не менее, если все ваши усилия направлены только на то, чтобы убедиться, что машина может переходить в спящий режим, возможно, проще будет создать дополнительный файл подкачки (в виде файла на диске, если это необходимо).
источник
Я наконец получил ответ на свой вопрос. Есть программа под названием smem (в Ubuntu / Debian
apt install smem
), которая позволяет вам перечислять подкачку и используемую память отдельно.Несколько различных способов перечисления свопинга можно найти здесь: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/ .
источник