LINUX.ORG.RU

и всё-таки свободная память


0

0

Как определить, сколько памяти свободно для выделения и использования прямо сейчас? Есть определённые мысли по поводу парсинга /proc/meminfo и арифметики с полученными значениями, но хочу выслушать другие мнения. Ещё раз - можно считать память свободной ту, максимальное кол-во которой можно выделить и использовать прямо сейчас.

man free

Тоже как-то этим вопросом интересовался. В итоге чем-то вроде этого пользовался:

free -b | sed '3!d' | awk '{print $4}'

kulti ★★
()
Ответ на: комментарий от kulti

я задал вопрос не просто так, т.к. free на пересечении «free» и «buffers/cache» не работает ;)

$ mkdir /tmp/1
$ mount -t tmpfs tmpfs /tmp/1 -o size=2g

$ free -b | sed '3!d' | awk '{print $4}'
5283790848

$ dd if=/dev/zero of=/tmp/1/z
dd: запись в «/tmp/1/z»: На устройстве кончилось место
4190201+0 записей считано
4190200+0 записей написано
 скопировано 2145382400 байт (2,1 GB), 10,7002 c, 200 MB/c

$ free -b | sed '3!d' | awk '{print $4}'
5409136640

Свободной памяти стало больше? :)

alex_custov ★★★★★
() автор топика

Есть всякие разные плазмоиды для этого, можно взять их исходники и посмотрерт

alix ★★★★
()
Ответ на: комментарий от tailgunner

Например в простом мониторе памяти, который будет показывать сколько памяти можно реально использовать.

alex_custov ★★★★★
() автор топика
Ответ на: комментарий от alex_custov

Хм, интересно:

df
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
/dev/sda1             9,6G  8,0G  1,7G  83% /
/dev/sda2             2,0G  614M  1,4G  32% /var
/dev/sdb2             909G  411G  499G  46% /Big
/dev/sdb1             489G  110G  379G  23% /Music
/dev/sda4             220G  201G   20G  92% /Data
none                 1013M     0 1013M   0% /dev/shm
/Data/DVD.ext2        4,4G  335M  4,0G   8% /4write@DVD
23:02 /dev/shm
free
             total       used       free     shared    buffers     cached
Mem:       2073732    1127552     946180          0     137696     568004
-/+ buffers/cache:     421852    1651880
Swap:      2000084       6008    1994076
23:02 /dev/shm
dd if=/dev/zero of=file bs=100M
dd: запись `file': На устройстве кончилось место
11+0 записей считано
10+0 записей написано
 скопировано 1060708352 байта (1,1 GB), 1,58777 c, 668 MB/c
23:02 /dev/shm
free
             total       used       free     shared    buffers     cached
Mem:       2073732    1915644     158088          0     117292    1386260
-/+ buffers/cache:     412092    1661640
Swap:      2000084       6532    1993552
23:03 /dev/shm
rm -f file 
23:03 /dev/shm
free
             total       used       free     shared    buffers     cached
Mem:       2073732     890612    1183120          0     117352     361060
-/+ buffers/cache:     412200    1661532
Swap:      2000084       6532    1993552
Я и раньше догадывался, что free вообще непонятно что показывает. А этот пример - лишнее доказательство: до заполнения гигабайта памяти свободно было явно меньше. Потом даже осталось еще немного свободного места. Ну, а после удаления - ясное дело, 1Гб освободился...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

с tmpfs запара скорее всего в том, tmpfs выделяется в shared memory, та что «Shmem» в /proc/meminfo, а эту память известные мне памятемерки не учитывают. То есть ты выделяешь и заполняшь два гига tmpfs, а свободная память по показаниям утилит как была так и осталась

alex_custov ★★★★★
() автор топика
Ответ на: комментарий от alex_custov

> Свободной памяти стало больше? :)

Думаю, да, т.к. часть ушла в своп.

Liosha_Syrnikov
()
Ответ на: комментарий от alex_custov

Почему же: видно, что увеличивается объем занятой памяти кэша. Сейчас посмотрел еще и как меняется /proc/meminfo: увеличивается объем кэша и активной памяти.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Да, но это очень ненадёжные показатели - в кеше может быть вообще всё что угодно, а в активная память меняется в процессе работы. Пока что единственный способ, чтобы учесть tmpfs, что я вижу - использование Shmem. Без использования tmpfs этот размер ничтожно мал - около 6Mb. А c использованием - он увеличивается настолько, сколько съела tmpfs.

alex_custov ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

>3:02 /dev/shm dd if=/dev/zero of=file bs=100M dd: запись `file': На устройстве кончилось место 11+0 записей считано 10+0 записей написано скопировано 1060708352 байта (1,1 GB), 1,58777 c, 668 MB/c

а ты файл попрообуй не нулями заполнять. бери не из zero, а из random например.

anonymous
()
Ответ на: комментарий от anonymous

а ты файл попрообуй не нулями заполнять.

Пожалуйста:

free 
             total       used       free     shared    buffers     cached
Mem:       1032944     935328      97616          0     178552     170896
-/+ buffers/cache:     585880     447064
Swap:      1026832     102788     924044
[02.07 09:03 /tmp]
dd if=/dev/urandom of=file bs=10M
dd: запись `file': На устройстве кончилось место
50+0 записей считано
49+0 записей написано
 скопировано 523202560 байт (523 MB), 122,926 c, 4,3 MB/c
[02.07 09:05 /tmp]
free
             total       used       free     shared    buffers     cached
Mem:       1032944    1011692      21252          0      11164     551032
-/+ buffers/cache:     449496     583448
Swap:      1026832     196680     830152
[02.07 09:05 /tmp]
rm -f file 
[02.07 09:05 /tmp]
free
             total       used       free     shared    buffers     cached
Mem:       1032944     501340     531604          0      11176      40756
-/+ buffers/cache:     449408     583536
Swap:      1026832     196656     830176

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ну что не понятно? До создания файла у тебя было использовано 585880 кб памяти, после создания - 449496, после удаления файла - 449408. Что неправильно?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.