Назад | Перейти на главную страницу

free показывает больше используемой памяти, чем общее количество верхнего процесса

ОБНОВИТЬ:

Это было вызвано известной проблемой с nss-softkn. См. Эту статью: https://www.splyt.com/blog/2014-05-16-optimizing-aws-nss-softoken


Когда я запускаю команду free -m из своего блока centos 6.5, я вижу, что у меня всего около 1400 МБ доступной оперативной памяти, включая кеш. Когда я делаю топ, сортирую по памяти и складываю процессы, которые я вижу только около 1600 используемых. У меня должно быть НАМНОГО больше свободной памяти. Это происходит на нескольких наших ящиках.

[root@db1 ~]# free -m
              total      used       free     shared    buffers     cached
Mem:          7840       7793         47          0        287       1357
-/+ buffers/cache:       6148       1692
Swap:         7983          7       7976

верхний выход

Вот лучший способ визуализировать память, потребляемую процессами:

У вас есть около 1692m в свободной памяти по Linux.

В верхней строке «Mem» может показаться, что у вас почти 99% памяти (7793 м / 7840 м), но на самом деле вы используете только около 78% доступной памяти. Смотрите также http://www.linuxatemyram.com/ для более подробного объяснения.


Free vs Top vs / proc / meminfo

Память процесса.
Добавление памяти, используемой процессами в top и пытаясь сопоставить это с используемой памятью free собирается доставить вам плохое время. Из-за top пейджинг, вы можете даже не получить все процессы из этого списка, лучше использовать ps aux --sort -rss упорядочить процессы по использованию памяти.

Кеширование диска.
Linux будет использовать память, которую вы не используете, чтобы все работало намного быстрее за кулисами. Это отмечено в free"cached", поэтому вам следует посмотреть на значения рядом с "- / + buffers / cache" для определения фактического использования и свободной памяти.

Кэш Slab ядра.
Модули ядра и драйверы позволяют использовать неиспользуемую память слишком. "SReclaimable" - это память, которую можно использовать при нехватке памяти. Есть классный инструмент под названием slabtop это может определить, как ядро ​​представляет собой этот кеш.

Очистка кешей.

echo 1 > /proc/sys/vm/drop_caches Чтобы освободить кеш страницы

echo 2 > /proc/sys/vm/drop_caches Чтобы освободить дентри и иноды

echo 3 > /proc/sys/vm/drop_caches Чтобы освободить кеш страницы, dentries и inodes

Смотрите также

Я нашел здесь проблему. Мне нужно было посмотреть / proc / meminfo и увидеть, что ядро ​​кэшировало как пространство для плиты. Моя проблема заключалась в том, что я не понимал, сколько «свободной» памяти у меня было в top / ps / free. Дело в том, что эти числа не складывались. Команда «free» сообщила бы мне, что у меня было примерно 1692 МБ, но мои процессы составляли только около 20% моей общей памяти.

В этой статье описаны мои точные проблемы:

http://blog.logicmonitor.com/2014/10/09/more-linux-memory-free-memory-that-is-not-free-nor-cache/

На основе http://blog.logicmonitor.com/2014/10/09/more-linux-memory-free-memory-that-is-not-free-nor-cache, Я создал сценарий, который назвал свободным (который я поместил в путь перед / usr / bin в моем .bash_profile), который дает полезные результаты:

#!/usr/bin/perl

$result = `/usr/bin/free`;
print "$result";

if ($result =~ /cache:\s+(\d+)/)
{
 $mem = $1;
 $slab = `cat /proc/meminfo|grep SReclaimable`; $slab =~ s/[^\d]//g;
 print "Slab                  $slab\n";
 print "Actual Used        ** ",$mem-$slab," **\n";
}

Я считаю, что вы неправильно читаете Buffers / Cache - в качестве кеша памяти используется> 6 гигабайт в соответствии со строкой +/- Buffers / Cache. Если это необходимо, его можно съесть - в противном случае ОС использует его для кэширования операций чтения с диска и тому подобного.