Используемая память на Solaris 10


10

Еще один вопрос о памяти на Solaris 10.

А топ показывает , что у меня 672 МБ свободной памяти:

130 processes: 126 sleeping, 2 zombie, 2 on cpu
CPU states: 95.1% idle,  3.9% user,  1.0% kernel,  0.0% iowait,  0.0% swap
Memory: 16G phys mem, 672M free mem, 2048M total swap, 2023M free swap

А vmstat показывает мне то же самое:

kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr rm s0 s1 s2   in   sy   cs us sy id
0 0 0 564744 687896  3  13  0  0  0  0  0  0  0  0  0  354  667  752  1  1 98

Но когда я делаю prstat -a -s размер, я получаю это:

NPROC USERNAME  SWAP   RSS MEMORY      TIME  CPU
   45 orbixadm 1449M 1592M   9.7%   4:46:53 0.4%
   48 root      146M  160M   1.0%   8:09:49 1.2%
    3 user1      46M  204M   1.2%   0:00:45 0.0%
    9 webservd   46M   14M   0.1%   0:00:00 0.0%
    5 ctxsrvr    28M   32M   0.2%   4:54:51 0.0%
   11 user2      23M   34M   0.2%   0:00:37 0.2%
    4 user3    4840K   11M   0.1%   0:00:01 0.0%
    1 smmsp    1456K 4552K   0.0%   0:00:24 0.0%
    2 daemon   2128K 6224K   0.0%   0:06:32 0.0%
    1 user4    1232K 3608K   0.0%   0:00:00 0.0%
    1 nagios    376K 2472K   0.0%   0:15:18 0.0%

и, как вы можете видеть, сумма значений RSS не достигает 15 ГБ памяти, и даже если я добавлю к ней значения SWAP.

Итак, мой вопрос: какой команде я верю?

Если top и vmstat дают хороший результат, где моя 15GB используемая память? Если нет, то почему они показывают мне это?

Изменить: результат для команды: % echo ::memstat | mdb -k

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    1687138             13180   82%
Anon                       137110              1071    7%
Exec and libs               47107               368    2%
Page cache                  95277               744    5%
Free (cachelist)            22248               173    1%
Free (freelist)             69592               543    3%

Total                     2058472             16081
Physical                  2055442             16058

Изменить 2:

Хорошо, теперь я вижу память, используемую кешем ARC.
Но с некоторыми новыми тестами, теперь у меня есть:

2066 MB used( prstat -Z и echo :: memstat | mdb -k результат)
1193 MB free( лучший результат)
8859 MB ARC cache( kstat zfs :: arcstats: размер результата)

Которые дают нам больше или меньше 12 GBпамяти, в то время как моя система имеет 16 GB.
Может быть, я что-то пропустил, но где другие 4 GB?


Пожалуйста, добавьте kstat zfs::arcstats:sizeвывод на ваш вопрос.
— Jlliagre

Ответы:


12

ZFS, вероятно, использует большую часть вашей памяти в качестве кэша ARC. Если вы хотите узнать, как используется ваша RAM, запустите эту команду как root:

# echo ::memstat | mdb -k

На Solaris 10 10/09 и новее это выглядит примерно так:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                      60569               236   16%
ZFS File Data               53270               208   14%
Anon                        41305               161   11%
Exec and libs                5891                23    2%
Page cache                   1190                 4    0%
Free (cachelist)             7006                27    2%
Free (freelist)            212607               830   56%

Total                      381838              1491

Как видите, есть строка, указывающая, сколько ОЗУ используется для кэширования данных файла ZFS. К сожалению, вы используете более старую версию Solaris 10, поэтому memstat не показывает эту статистику ZFS отдельно. Он включен в используемую ядром память, что сбивает с толку. Ядро не должно использовать 13 ГБ оперативной памяти при нормальных обстоятельствах.

В любом случае, на вашем сервере все еще есть возможность отобразить полный размер ARC.

Просто запустите эту команду:

# kstat zfs::arcstats:size
module: zfs                             instance: 0
name:   arcstats                        class:    misc
        size                            273469024

Это показывает, что на моей машине в настоящее время используется 273 МБ ОЗУ для обработки кэша ZFS ARC. memstat показывает, что из этих 273 МБ 208 МБ используются в качестве файлового кэша. До 208 МБ ОЗУ может быть выделено автоматически по требованию, если оно потребуется приложениям.

Теперь давайте посмотрим на использование памяти процессами. Если вы используете опцию -Z с prstat, она показывает сводку по зонам под статистикой по процессам. Здесь глобальная (и единственная) зона использует 185 МБ ОЗУ. Это должно (примерно) соответствовать сумме всех процессов rss столбца.

# prstat -Z
PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
   741 noaccess  129M  113M sleep   59    0   0:00:35 1,4% java/18
   973 root     5148K  832K run     29    0   0:00:00 0,4% script/1
   972 root     5072K  900K sleep   59    0   0:00:00 0,2% script/1
   998 root     7148K 2812K cpu0    49    0   0:00:00 0,1% prstat/1
   974 root     3456K  968K sleep   49    0   0:00:00 0,1% ksh/1
     5 root        0K    0K sleep   99  -20   0:00:01 0,1% zpool-rpool/37
   241 root     5400K 1608K sleep   59    0   0:00:00 0,0% VBoxService/5
    77 root     7620K 2356K sleep   59    0   0:00:00 0,0% devfsadm/7
   969 root     3372K  936K sleep   59    0   0:00:00 0,0% script/1
   126 root     9664K 2844K sleep   59    0   0:00:00 0,0% nscd/31
   480 root     9420K 2036K sleep   59    0   0:00:00 0,0% sendmail/1
    11 root     9164K 7860K sleep   59    0   0:00:29 0,0% svc.configd/17
     1 root     2504K 1432K sleep   59    0   0:00:00 0,0% init/1
   413 root       15M 9644K sleep   59    0   0:00:00 0,0% fmd/19
   377 root     6536K 2848K sleep   59    0   0:00:02 0,0% inetd/4
ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE
     0       48  177M  185M    12%   0:01:24 2,5% global

Эти 185 МБ соответствуют сумме двух строк в выводе memstat: «Anon» - это оперативная память, используемая приложениями для хранения данных, и «Exec and libs» - это код приложений и их библиотек.


Спасибо за ваш ответ тоже, результат команды не очень подробно, но есть необходимость посмотреть, что использует RAM.
— Джереми С.

Можете ли вы добавить его вывод, обновив свой вопрос? Кстати, ответ, который вы приняли, на самом деле немного некорректен, поскольку несотображенные страницы в Solaris сообщаются как свободные ОЗУ, а не как используемые, что является проблемой, на которую вы жалуетесь.
— Jlliagre

Вопрос отредактирован с помощью команды result. Вы правы, мои вопросы не полностью ответили. По крайней мере, мы видим, что свободная память одинакова с top и vmstat, чем с :: memstat . Но есть ли смысл детализировать, что используется каждым процессом?
— Джереми С.

Какое обновление Solaris 10 вы используете (cat / etc / release) и используете ли вы ZFS?
— Jlliagre

это Solaris 10 5/09, и да, я использую ZFS
— Джереми С.

4

Память заполнена несопоставленными страницами данных, считанных с диска. Он хранится в памяти, потому что эти файлы могут быть прочитаны снова, а хранение данных в памяти сохраняет чтение диска. Свободная память тратится впустую, поэтому компьютер старается сохранить ее как можно меньше.

Например, скажем, вы запускаете программу. Программа завершается. Программа все еще находится в памяти, но эти страницы памяти не используются никаким процессом, так как программа не запущена. Если система не находится под давлением памяти, страницы хранятся в памяти. Если программа запустится снова, это избавит вас от необходимости освободить ее, просто выделив больше памяти для программы, а затем прочитав ее снова. И если страницы нужны для чего-то другого, это все равно выигрыш для системы, потому что легче перенести страницу памяти напрямую из использования в другую, чем сделать ее свободной только для повторного использования.

Память не является ресурсом, который можно сохранить. Если вы оставите 1 ГБ на час свободным, все, что вы могли бы сделать с этими данными, будет потеряно навсегда.


Спасибо за этот хорошо объясненный ответ. Теперь я понимаю, почему на всех моих серверах Solaris используется более или менее 90% ОЗУ.
— Джереми С.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.