Використовувана пам'ять на 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.

Отже, моє запитання: в яку команду я вірю?

Якщо топ і vmstat дають хороший результат, де моїй 15 Гб пам'яті, що використовується? Якщо ні, то чому вони мені це показують?

Редагувати: результат для команди: % 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. Якщо ви хочете знати, як використовується ваша оперативна пам'ять, запустіть цю команду як корінь:

# 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. мемстат показує, що з цих 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 Мб відповідають сумі двох рядків у виводі мемстату: "Anon", що є оперативною пам'яттю, яка використовується програмами для зберігання даних, та "Exec and libs", що є додатками та кодом їх бібліотек.


Дякую за вашу відповідь, результат команди не дуже детальний, але є необхідне, щоб побачити, що використовує оперативну пам’ять.
Джеремі C.

Чи можете ви додати свої результати, оновивши своє запитання? До речі, відповідь, яку ви прийняли, насправді є злегка невірною, оскільки Solaris про неоформлену сторінку повідомляється як безкоштовну оперативну пам’ять, а не про використану, яка є проблемою, на яку ви скаржитеся.
jlliagre

Питання відредаговано з результатом команди. Ви маєте рацію на мої запитання не відповідають повністю. Принаймні, ми бачимо, що вільна пам'ять однакова з верхнім і vmstat, ніж з :: memstat . Але чи є сенс деталізувати, що стосується кожного процесу?
Джеремі C.

Яке оновлення Solaris 10 ви використовуєте (cat / etc / release) і чи використовуєте ви ZFS?
jlliagre

це Solaris 10 5/09, і так, я використовую ZFS
Jeremy C.

4

Пам'ять заповнюється незробленими сторінками даних, прочитаних з диска. Він зберігається в пам'яті, оскільки ці файли можуть бути прочитані ще раз, а збереження даних у пам'яті зберігає прочитаний диск. Вільна пам'ять назавжди втрачається, тому комп'ютер намагається зберегти якнайменше її.

Наприклад, скажімо, що ви запускаєте програму. Програма припиняється. Програма все ще зберігається в пам'яті, але ці сторінки пам'яті не використовуються жодним процесом, оскільки програма не працює. Якщо система не знаходиться під тиском пам'яті, сторінки зберігаються в пам'яті. Якщо програма запуститься знову, це дозволить заощадити зусилля, щоб зробити її вільною, просто потрібно виділити більше пам'яті для програми, а потім прочитати її ще раз. І якщо сторінки потрібні для чогось іншого, це все одно виграш для системи, оскільки простіше перенести сторінку пам'яті безпосередньо з використання на іншу, ніж зробити її безкоштовною лише для того, щоб її знову використали.

Пам'ять - це не економний ресурс. Якщо ви залишите 1 Гб безкоштовно на годину, все, що ви могли зробити з цими даними, назавжди втрачено.


Дякую за цю добре пояснену відповідь. Зараз я розумію, чому всі мої сервери Solaris використовують більш-менш 90% оперативної пам’яті.
Джеремі К.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.