Post by Dmitry MiloserdovГде еще три или даже четыре гига? Если их например откусили под shmem,
они не будут показываться в "swap -s" как used? Если нет, то как
увидеть, сколько откусили под shmem и кто?
Hу shmem смотрится классически ipcs -m
Я смотрел "ipcs -b", показывает что SEGSZ у оракла примерно полгига.
Откуда отведены эти полгига (из Kernel или Exec или ...) - мне непонятно.
Hо см. далее.
Post by Dmitry Miloserdovswap -s - показывает память которая может размещаться в свопе.
То есть туда не может попасть память "приколотая" с помощью mlock()
или память со своим бекэндом то есть файлы отображенные в память
через mmap(). Первая не показана совсем, а вторая считается available.
Hо главная головная боль - это память ядра.
Если используешь zfs ( а судя по расположению свопа - используешь ) -
то в памяти ядра сидит куча данных - некий аналог pagecache для
остальных ФС. Он освобождается при необходимости. То есть, несмотря
на то, что только 2Г available, если процесс запросит 3Г, то он
скорее всего их получит.
$ echo ::memstat | pfexec mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 858751 3354 27%
ZFS File Data 1455754 5686 46%
Anon 345073 1347 11%
Exec and libs 13538 52 0%
Page cache 6301 24 0%
Free (cachelist) 133073 519 4%
Free (freelist) 331012 1293 11%
Total 3143502 12279
Physical 3083836 12046
Вот несмотря на наличие ZFS, "ZFS File Data" у меня не фигурирует.
Интересно другое. Вот состояние памяти на свежезагруженной системе,
оракл не запущен:
# swap -s
total: 253948k bytes allocated + 48084k reserved = 302032k used, 5336008k available
# echo ::memstat | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 207872 812 13%
Anon 65577 256 4%
Exec and libs 7351 28 0%
Page cache 6402 25 0%
Free (cachelist) 5882 22 0%
Free (freelist) 1277209 4989 81%
Total 1570293 6133
Physical 1555405 6075
#
Запускаем оракл, и кто-то откусывает полгига от ядерной памяти.
Могу предположить, это те самые полгига shmem.
# swap -s
total: 869052k bytes allocated + 133732k reserved = 1002784k used, 4087116k avai
lable
# echo ::memstat | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 343643 1342 22%
Anon 219368 856 14%
Exec and libs 19616 76 1%
Page cache 6421 25 0%
Free (cachelist) 8510 33 1%
Free (freelist) 972735 3799 62%
Total 1570293 6133
Physical 1555405 6075
#
Останавливаем оракл, а ядерная память не освобождается:
# swap -s
total: 256408k bytes allocated + 49368k reserved = 305776k used, 4772360k available
# echo ::memstat | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 347501 1357 22%
Anon 66183 258 4%
Exec and libs 7357 28 0%
Page cache 6402 25 0%
Free (cachelist) 21071 82 1%
Free (freelist) 1121779 4381 71%
Total 1570293 6133
Physical 1555405 6075
#
Более того, со временем эта ядерная память увеличивается до 3Г с
лишним, available соответственно уменьшается, и начинаются проблемы.
Можно ли узнать, кто скушал ядерную память или как ее почистить?
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
2:5005/***@fidonet http://vas.tomsk.ru/