![Краткое содержание:](https://rvso.com/image/36008/%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%BE%D0%B5%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5%3A.png)
Вопрос: как мы можем сообщить РЕАЛЬНОЕ использование памяти (безкэш!) с помощьюнмонилиvmstatилисвмонна AIX 6?
нмон:
vmstat:
свмон:
Как и в Linux, мы можем использовать команду free, но в AIX она недоступна:
[user@notebook ~]$ free -m
total used free shared buffers cached
Mem: 7797 4344 3453 0 219 2745
-/+ buffers/cache: 1379 6417
Swap: 2047 0 2047
[user@notebook ~]$ free -m | grep cache: | awk '{print $3}'
1379
[user@notebook ~]$
решение1
Короткая версия: посмотрите на используемые clnt
+ pers
страницы в svmon -G
выходных данных (единица измерения — 4 тыс. страниц), если вы хотите узнать весь файловый кэш, или посмотрите на vmstat -v
«файловые страницы» для файлового кэша, за исключением исполняемых файлов (та же единица измерения).
Если вы хотите получить полное представление о том, что происходит, вам следует ознакомиться со следующей статьей:Обзор замены страницы AIX.
Если говорить совсем кратко, то память в AIX классифицируется двумя способами:
Рабочая память против постоянной памяти
Рабочая память — это память процесса (стек, куча, разделяемая память) и память ядра. Если этот тип памяти нужно выгрузить, он идет в своп.
Постоянная память — это кэш файлов. Если его нужно выгрузить, он возвращается в файловую систему, откуда он пришел (для грязных страниц чистые страницы просто перерабатываются). Он подразделяется на неклиентские (или постоянные) страницы для файловых систем JFS и клиентские страницы для JFS2, NFS и, возможно, других.
Вычислительные и невычислительные страницы.
Вычислительные страницы снова представляют собой данные процесса и ядра, а также текстовые данные процесса (т. е. страницы, которые кэшируют исполняемый файл/код).
Другие типы кэша не являются вычислительными: это файловый кэш, который не является исполняемым (или разделяемая библиотека).
svmon -G
(кстати, svmon -G -O unit=MB
немного дружелюбнее) дает вам рабочие и постоянные страницы. Столбец work
, ну, рабочая память. Вы получаете постоянную память, складывая столбцы pers
(JFS) и clnt
(JFS2).
В вашем случае у вас есть около 730 МБ постоянных страниц, которые поддерживаются вашими файловыми системами (186151*4k страниц).
Теперь topas
верхний правый «виджет» FileSystemCache (numperm)
показывает что-то немного другое, и вы получите те же данные с помощью vmstat -v
: это только невычислительные постоянные страницы. т.е. то же самое, что и выше, но без учета страниц для исполняемых файлов.
В вашем случае это около 350 МБ (2,2% от 16 ГБ).
В любом случае, кэша на самом деле не так уж и много.
решение2
Команда, которую вы ищете (на мой взгляд), следующая:
# svmon -P -O filtertype=working,segment=off,filtercat=exclusive,unit=MB
Ключевые варианты здесь:
- 'filtertype=working' # то есть без кэша;
- 'segment=off' # на самом деле по умолчанию при использовании -O
- 'filtercat=exclusive' # не включать разделяемую память или ядро atm
- 'unit=MB' # кто хочет посчитать из # страниц ??
И вам следует рассмотреть другие параметры, такие как -C (связанные с именем команды, некоторые примеры ниже) и, возможно, -U (связанные с пользователем).
++++ начало комментария ++++
вставляю то, что я бы вставил в качестве комментария к вашему вопросу, но у меня нет репутации - я новый пользователь здесь.
Ваш вывод vmstat говорит мне больше, чем просто о вашей текущей ситуации - поскольку это однострочный вывод - он исторический - и я подозреваю, что у вас были проблемы с памятью, поскольку он показывает историю pi/po (загрузка страницы в пространство подкачки/выгрузка страницы в пространство подкачки)
Другие интересные столбцы — это столбцы fr/sr:
- fr: страницы, освобожденные lrud (самый недавний используемый демон, он же похититель страниц)
- sr: страницы, отсканированные/просмотренные lrud в поисках «старой» страницы
- sr/fr: отношение, выражающее, сколько страниц необходимо «отсканировать», чтобы освободить 1
Что меня беспокоит, так это приведенные здесь значения pi/po, которые совершенно не соответствуют данным из других команд, а также отсутствие времени безотказной работы, поэтому сложно понять, для чего «test» сгенерировал эти числа.
- pi: страница пространства подкачки (т.е. чтение памяти приложения из пространства подкачки)
- po: украсть память и записать память приложения (т.е. рабочую) в пространство подкачки — только рабочая память перемещается в/из пространства подкачки
В своей презентации вы показываете pi=22 и po=7. Это означает, что в среднем система считывала информацию из пространства подкачки (после того, как она была записана) в 3 раза чаще, чем записывала данные. Это признак голодной системы, поскольку данные считываются (pi), а затем снова крадутся (sr/fr) до того, как к ним кто-либо прикоснется (ссылаются, то есть используются) - или считываются и снова удаляются до того, как приложение, «ожидающее» их, когда-либо получит возможность получить к ним доступ.
Короче говоря, представленные данные не «синхронизированы» с «болевыми» моментами, хотя это может объяснить, почему только 2,2% вашей памяти теперь используется для кэширования (оно может быть даже «вычислительным, т.е. загруженными программами»).
НасколькоvmstatЯ также предлагаю использовать флаги -I (заглавная:i, которая добавляет «fi» и «fo» — активность fileIn и fileOut) и -w (широкая), чтобы числа лучше располагались под текстовыми заголовками.
++++ конец «комментария»
Давайте посмотрим отрывок, используя -P (просмотр процесса)
# svmon -P -O filtertype=working,segment=off,filtercat=exclusive,unit=MB | head -15
Unit: MB
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual
14614630 httpd 21.5 0.06 0 21.5
11272246 httpd 21.4 0.06 0 21.4
12779758 httpd 21.2 0.06 0 21.2
17760476 httpd 20.9 0.06 0 20.9
11796712 httpd 20.8 0.06 0 20.8
17039454 httpd 20.6 0.06 0 20.6
11862240 httpd 20.6 0.06 0 20.6
14680090 httpd 20.5 0.06 0 20.5
10747970 httpd 20.5 0.06 0 20.5
11141286 httpd 20.5 0.06 0 20.5
4718766 mysqld 13.6 0.02 0 13.6
Если вы не являетесь пользователем root, вы видите только команды в своей среде.
$ svmon -P -O filtertype=working,segment=off,filtercat=exclusive,unit=MB
Unit: MB
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual
5505172 svmon 10.7 0.19 0.44 11.4
6553826 ksh 0.57 0.02 0 0.57
9175288 ksh 0.55 0.02 0 0.55
12910710 sshd 0.55 0.02 0 0.55
15204356 sshd 0.52 0.02 0 0.52
12779760 head 0.18 0.02 0 0.18
Возможно, вам захочется посмотреть на определенную команду, поэтому переключитесь обратно в режим root, чтобы посмотреть на httpd.
Краткое содержание:
svmon -C httpd -O filtertype=working,segment=off,filtercat=exclusive,unit=MB
Unit: MB
===============================================================================
Command Inuse Pin Pgsp Virtual
httpd 227.44 0.69 0 227.44
Подробности: отрывок
# svmon -C httpd -O filtertype=working,segment=category,filtercat=exclusive,unit=MB >
Unit: MB
===============================================================================
Command Inuse Pin Pgsp Virtual
httpd 230.62 0.81 0 230.62
...............................................................................
EXCLUSIVE segments Inuse Pin Pgsp Virtual
230.62 0.81 0 230.62
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
81a203 3 work working storage m 24.6 0 0 24.6
parent=883990
8b82d7 3 work working storage m 18.8 0 0 18.8
parent=834226
8b9d37 3 work working storage m 18.2 0 0 18.2
parent=884fb0
8915f2 f work shared library data m 2.00 0 0 2.00
parent=898373
89abb3 f work shared library data m 2.00 0 0 2.00
parent=84b9a9
824ea4 f work shared library data m 2.00 0 0 2.00
Это не очень хорошо отображает «сегмент=категория», поэтому теперь с помощью более простой команды — tail — и показываем сводку и подробности по каждому типу «сегмента» памяти — но по-прежнему только «рабочую» память (т. е. без кэширования)
# svmon -C tail -O filtertype=working,segment=category,unit=MB
Unit: MB
===============================================================================
Command Inuse Pin Pgsp Virtual
tail 82.5 52.6 5.12 90.6
...............................................................................
SYSTEM segments Inuse Pin Pgsp Virtual
34.1 33.1 2.38 35.8
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
10002 0 work kernel segment m 34.1 33.1 2.38 35.8
...............................................................................
EXCLUSIVE segments Inuse Pin Pgsp Virtual
0.18 0.02 0 0.18
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
88b4f1 f work working storage sm 0.09 0 0 0.09
82d005 2 work process private sm 0.07 0.02 0 0.07
8e0c9c 3 work working storage sm 0.02 0 0 0.02
...............................................................................
SHARED segments Inuse Pin Pgsp Virtual
48.2 19.5 2.75 54.6
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
9000 d work shared library text m 48.2 19.5 2.75 54.6
решение3
nmon, затем нажмите «m», и вы быстро увидите несколько крупных вариантов использования памяти.
ipcs -am
Общая память, используемая многими приложениями, такими как DB2 и Oracle — проверьте SEGSZ для размера из ipcs -am
команды. Столбец Owner обычно сообщает вам, для чего он используется, например, пользователь oracle для SGA или db2inst1 для буферного кэша DB2.
Затем дело доходит до процессов, и это становится сложным. Все процессы, запускающие один и тот же программный файл, будут совместно использовать кодовые страницы как его только для чтения. Они также могут совместно использовать некоторые или почти все страницы данных и мешков, если процессы запущены общим процессом, который затем разветвляется, как, например, RDBMS и такие вещи, как Apache. Это также верно для десятков библиотек, которые также нужны процессам и в значительной степени невидимы для нас.
Из-за этого неизвестного разделения часто бывает так, что если сложить всю память всех процессов, то она, очевидно, намного больше, чем объем памяти.
Если вы используете nmon
«t» для верхних процессов, а затем «4» для упорядочивания по размеру процесса, вы увидите память процесса.
- Размер КБ = размер, указанный в файле программы на диске.
- Размер резидентного набора = его размер в памяти (исключая страницы, все еще находящиеся в файловой системе (например, код) и некоторые части на дисках подкачки)».
- Столбец ResText — это кодовые страницы резидентного набора.
- Столбец ResData — это страницы данных и стека резидентного набора.
решение4
Команда topas
показывает реальную память и процент памяти компьютера. Она должна быть доступна по умолчанию в AIX, и она похожа (но предоставляет гораздо больше информации) top
на Linux.
При запуске topas
по умолчанию отображается множество информации (самые популярные процессы, использующие ЦП, сводка по использованию памяти и т. д.), а при нажатии hотображается встроенный текст справки с другими клавишами и их функциями (например, при нажатии cнесколько раз будут циклически отображаться различные способы отображения использования ЦП).