Использование памяти


Главная Форумы POWER Systems AIX/Hardware Использование памяти

В этой теме 8 ответов, 5 участников, последнее обновление  Alex 6 года/лет, 1 месяц назад.

Aliexpress INT
  • Автор
    Сообщения
  • #12745

    Alex
    Участник
    Aliexpress INT

    Hello All!

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

    Ситуация
    Для Java выделено 6ГБ heap
    nmon показывает что все 11 ГБ на сервере используются.
    svmon -U не показывает мне кто же занял всю память.

    (Скриншоты)

    Если взять svmon -S -O pidlist=on и посчитать сегменты связанные с процессом java то цифры сходятся.
    Получается это единственный способ?

    Attachments:
  • #12746

    andrewk
    Участник

    svmon и его документация

  • #12747

    Alex
    Участник

    Спасибо на добром слове.
    Читал не разобрался (мозгов/знаний не хватает), потому и спрашиваю.

    А подскажите как Вы это делаете?

  • #12748

    andrewk
    Участник

    начинаю всегда с svmon -G – смотрю глобальную статистику использования памяти. У Вас известен процесс-потенциальный зажиратель памяти – посмотрите статистику не по пользователю, а по конкретному процессу. То, что количество памяти сожранной процессом отличается от общего количества сожранной памяти – это нормально. Если слишком намного – посмотрите статистику по сегментам памяти, попробуйте найти самые жрущие сегменты и установить, к каким процессам или библиотеками они относятся.
    Никакой конкретной рекомендации, как поступать лично Вам и в Вашем конкретном случае, здесь нет и быть не может.

  • #12781

    Alexander Tchoulkov
    Участник

    Здравствуйте,

    насчёт того что вся память используется:

    nmon и topas (начиная с некоторого времени это фактически одно и тоже) в нормально работающей и хорошо сбалансированной системе показывают 100 % или около 100% использование памяти. Размер свободной памяти который они отображают не имеет большого смысла с точки зрения инженерных людей и больше предназначены для красивой отчётности манажементу. Т.к. эти утилиты показывают _ВСЮ_ занятую память, т.е. они не вычитают размер глобального файлового кэша. AIX (VMM) испольует всю “свободную” в системе память для глобального файлового кэша. При этом он постепенно заполняет память не занятую процессами кешируя файлы, в результате вся память оказывается занятой (системные области + процессы + глобальный файловый кэш). Что не является проблемой т.к. когда процессу необходима память страницы оперативной памяти (в необходимом количестве) используемые под файловый кэш передаются процессу который запросил память. И позволяет очень сильно увеличить скорость работы файлового ввода/вывода.

    В этом принципе работы VMM есть тонкий момент, скажем двойственность. С одной стороны, с точкизрения системы память вся занята – системные области + процессы + глобальный файловый кэш, следовательно topas/nmon показывают что память вся занята. _НО_ с другой стороны, с точки зрения процессов глобального файлового кэша не существует и в системе есть свободная память как минимум в размере глобального файлового кэша.

    Если Вы хотите определить сколько физической памяти реально занято системой и процессами исключая области которые временно используются системой и будут освобождены ею и переданны процессам при первом же запросе памяти от процессов. То Вам нужно смотреть на поле Virtual в выводе svmon или на поле avm вывода vmstat это будет размер памяти занятой системой и процессами исключая временно используемые операционной системой области. И Вам нужно просто вычесть это значение из общего размера физической памяти.

    Кто использует память в системе

    svmon это средство для отладки приложений и точной настройки производительности оно показыват огромное количество деталей которое для быстрой оценки и каждодневного использования в общем не нужно.

    Есть и больее быстрый и более простой способ определения кто использует память в системе. Это испльзовать команду ps с параметрами стиля BSD:

    # ps gv | head -n 1; ps gv | egrep -v “RSS” | sort +6b -7 -n -r

    Эти команды покажут использование памяти а вторая и отсортирует в убывающем порядке. Интересующие нас поля в выводе это:

    RSS – сумарный размер text + data сегментов используемых процессом
    %MEM – сумарныей размер text + data сегментов используемых процессом делённый на общий размер памяти
    TRS – размер памяти используемый для text сегментов
    SIZE – текущий размер выделенного пространства в свопинге для процесса

    С помощью старой доброй команды ps с опциями BSD стиля можно получить очень быстро оценку по занимаемой процессами памяти не углубдяясь в детали отображаемые svmon.

  • #12815

    Ivan
    Участник

    Hello All!

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

    Ситуация
    Для Java выделено 6ГБ heap
    nmon показывает что все 11 ГБ на сервере используются.
    svmon -U не показывает мне кто же занял всю память.

    (Скриншоты)

    Если взять svmon -S -O pidlist=on и посчитать сегменты связанные с процессом java то цифры сходятся.
    Получается это единственный способ?

    Возможно что-то типа:
    смотрим информацию по сегментам занимающим наибольшее количество страниц памяти:
    $svmon -Sut 10
    далее, смотрим подробную информацию по большим сегментам (перечисляем Vsid):
    к примеру:
    $svmon -S a41225 98ca19 -l -r -j
    , здесь видна информация о inode, процессах использующих этот сегмент и тд.

    ps -хренова тем что не отражает информацию о shared memory.

    Полезная конструкция:
    $svmon -Pt15 | perl -e ‘while(){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}’

    В Вашем случае, видимо память используется под кэш ФС, это значение можно посмотреть в поле “file pages” вывода утилиты $vmstat -v (страницы 4К).

    можно почитать:
    http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/mem_use_processes.htm

  • #12816

    uxTuaHgp
    Участник

    О, а что такое
    svmon -u ?
    В мане нет, но не ругается, правда и эффекта не наблюдаю, то же спмое и с -l -r -j

  • #12820

    Ivan
    Участник

    The -u flag sorts the output in descending order by the total number of pages in real memory.
    http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/mem_use_processes.htm

  • #12932

    Alex
    Участник

    Всем спасибо.
    Нашли 🙂

    Сегменты mmap не попадают в подсчет для процесса
    Помогает mapping=on

    # svmon -C jstart -O unit=MB
    Unit: MB
    ===============================================================================
    Command Inuse Pin Pgsp Virtual
    jstart 374.03 32.6 477.52 864.15

    # svmon -C jstart -O unit=MB,mapping=on
    Unit: MB
    ===============================================================================
    Command Inuse Pin Pgsp Virtual
    jstart 3101.73 32.6 1646.50 4072.71

Для ответа в этой теме необходимо авторизоваться.